Code: Select all
procedure TForm1.Button1Click(Sender: TObject);
var
sDBFileName: string;
begin
sDBFileName := 'C:\Temp\TESTDB.FDB';
qry := TIBCQuery.Create(nil);
con := TIBCConnection.Create(nil);
DeleteFile(sDBFileName);
con.Database := 'localhost:' + sDBFileName;
con.ClientLibrary := 'fbclient.dll';
con.Username := 'SYSDBA';
con.Password := 'masterkey';
con.Options.Charset := 'UTF8';
con.Options.UseUnicode := True;
con.Options.CharLength := 1;
con.LoginPrompt := False;
con.Params.Clear;
con.Params.Add('USER ''SYSDBA''');
con.Params.Add('PASSWORD ''masterkey''');
con.Params.Add('PAGE_SIZE 4096');
//con.Params.Add('DEFAULT CHARACTER SET ASCII'); //this works
//con.Params.Add('DEFAULT CHARACTER SET UTF8'); //this also works
con.Params.Add('DEFAULT CHARACTER SET NONE'); //this doesn't work
con.CreateDatabase;
con.Disconnect;
con.Connect;
con.ExecSQL('CREATE TABLE LOG_REMOTESITE (' +
'LOG_REMOTESITEID BIGINT NOT NULL, ' +
'REMOTESITEID BIGINT NOT NULL, ' +
'CHANGEOPERATION CHAR NOT NULL, ' +
'CHANGETIME TIMESTAMP NOT NULL, ' +
'NEW_SITECODE VARCHAR(20) CHARACTER SET UTF8, ' +
'OLD_SITECODE VARCHAR(20) CHARACTER SET UTF8, ' +
'NEW_SITEDESCRIPTION VARCHAR(100) CHARACTER SET UTF8, ' +
'OLD_SITEDESCRIPTION VARCHAR(100) CHARACTER SET UTF8, ' +
'NEW_MINNUMBER BIGINT, ' +
'OLD_MINNUMBER BIGINT, ' +
'NEW_MAXNUMBER BIGINT, ' +
'OLD_MAXNUMBER BIGINT, ' +
'NEW_DATABASEGUID VARCHAR(31) CHARACTER SET ASCII, ' +
'OLD_DATABASEGUID VARCHAR(31) CHARACTER SET ASCII, ' +
'NEW_FQDN VARCHAR(200) CHARACTER SET UTF8, ' +
'OLD_FQDN VARCHAR(200) CHARACTER SET UTF8, ' +
'NEW_IPADDRESS VARCHAR(30) CHARACTER SET UTF8, ' +
'OLD_IPADDRESS VARCHAR(30) CHARACTER SET UTF8, ' +
'NEW_COUNTRYID BIGINT, ' +
'OLD_COUNTRYID BIGINT, ' +
'NEW_TIMEZONE NUMERIC(3,1), ' +
'OLD_TIMEZONE NUMERIC(3,1), ' +
'NEW_ISACTIVE CHAR CHECK (NEW_ISACTIVE is null or (NEW_ISACTIVE in (''F'',''T'') )), ' +
'OLD_ISACTIVE CHAR CHECK (OLD_ISACTIVE is null or (OLD_ISACTIVE in (''F'',''T'') ))) ', []);
qry.Connection := con;
qry.SQL.Add('SELECT * FROM LOG_REMOTESITE');
qry.Open; //AV occurs here
qry.Close;
qry.Free;
con.Free;
end;I can work around this problem by changing the character set of the database, but I am curious as to why it is occurring in the code as shown.