Ok, I solve the widestring and widememo problem as I connect to the correct database with default charset is UTF-8. Now I have another issue:
When I try to update the Blob type 1 field, I got the follow error:
Dynamic SQL Error
SQL error code = -303
feature is not supported
blob and array data types are not supported for move operation
Here is my database script:
SET SQL DIALECT 1;
CREATE DATABASE 'c:\db\crazyutf8.fdb' PAGE_SIZE 4096 DEFAULT CHARACTER SET UTF8
/* Table: USERS, Owner: SYSDBA */
CREATE TABLE USERS
(
USERID VARCHAR(30) NOT NULL,
PASSWD VARCHAR(20) NOT NULL,
SALUTATION VARCHAR(6),
FIRSTNAME VARCHAR(40),
LASTNAME VARCHAR(40),
NOTES BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
PRIMARY KEY (USERID)
);
Here is my Delphi code:
Code: Select all
object SQLQuery1: TSQLQuery
MaxBlobSize = -1
Params =
SQL.Strings = (
'Select * from Users')
SQLConnection = conDevart
Left = 128
Top = 40
end
object conDevart: TSQLConnection
ConnectionName = 'DEVART INTERBASE'
DriverName = 'DevartInterBase'
GetDriverFunc = 'getSQLDriverInterBase'
LibraryName = 'dbexpida40.dll'
LoginPrompt = False
Params.Strings = (
'drivername=DevartInterBase'
'Database=C:\DB\CrazyUTF8.fdb'
'User_Name=sysdba'
'Password=masterkey'
'sqldialect=1'
'blobsize=-1'
'localecode=0000'
'devartinterbase transisolation=ReadCommited'
'waitonlocks=True'
'charlength=1'
'enablebcd=True'
'optimizednumerics=True'
'longstrings=True'
'usequotechar=False'
'fetchall=False'
'useunicode=True')
VendorLib = 'gds32.DLL'
Left = 32
Top = 208
end
procedure TForm1.btnExeClick(Sender: TObject);
begin
SQLQuery1.Close;
SQLQuery1.SQL.Text := 'Update Users Set Notes = :Notes';
SQLQuery1.ParamByName('Notes').DataType := ftBlob;
SQLQuery1.ParamByName('Notes').ParamType := ptInput;
SQLQuery1.ParamByName('Notes').AsString := Memo1.Text; // The memo.text are some Chinese characters
SQLQuery1.ExecSQL();
end;
But if I do this, everything works fine:
Code: Select all
procedure TForm1.btnExeClick(Sender: TObject);
begin
SQLQuery1.Close;
SQLQuery1.SQL.Text := 'Update Users Set Notes = '" + Memo1.Text + '"';
SQLQuery1.ExecSQL();
end;
Any suggestion?
Cheers,