【发布时间】:2017-08-24 02:29:43
【问题描述】:
我使用以下代码将文本分配给 SQL 参数:
quInsert.Parameters.ParamByName('veh_type').value := copy(s,11,1);
有时,我正在读取的 .txt 文件中的文本是 UTF-8 格式,其中包含使用两个字节的字符。如何更改以下代码以接受 UTF-8 数据?
procedure TPrepareform.Button1Click(Sender: TObject);
var
f : textfile;
s : string;
i : integer;
IsAnsiString : Boolean;
begin
with quInsert do
begin
close;
sql.clear;
sql.add('insert into v_info_2018');
sql.add('(record_type, plate_group, plate_no, v_type, v_type_cn,');
sql.add('v_type_pt, v_type_pt, v_brand, engine_no, ct_tax_amount');
sql.add('inspect_date, record_date');
sql.add('values (:record_type, :plate_group, :plate_no, :v_type, :v_type_cn, :v_type_pt, :v_type_pt,');
sql.add(':v_brand, :engine_no, :ct_tax_amount,');
sql.add(':inspect_date, :record_date');
end;
i := 0;
assignfile(f,edMasterName.Text);
reset(f);
while not eof(f) do
begin
readln(f,s);
inc(i);
end;
prInsert.Max := i;
i := 0;
reset(f);
VRS_Main.StatusBar1.Panels[5].Text:='0';
while not eof(f) do
begin
inc(i);
prInsert.StepIt;
readln(f,s);
quInsert.Parameters.ParamByName('record_type').value := copy(s,1,1);
quInsert.Parameters.ParamByName('plate_group').value := copy(s,2,1);
quInsert.Parameters.ParamByName('plate_no').value := copy(s,3,8);
quInsert.Parameters.ParamByName('v_type').value := copy(s,11,1);
quInsert.Parameters.ParamByName('v_type_cn').value := UTF8Decode(copy(s,12,50));
quInsert.Parameters.ParamByName('v_type_pt').value := copy(s,62,50);
quInsert.Parameters.ParamByName('v_brand').value := copy(s,112,30);
quInsert.Parameters.ParamByName('engine_no').value := copy(s,142,50);
quInsert.Parameters.ParamByName('ct_tax_amount').value := copy(s,192,9);
quInsert.Parameters.ParamByName('inspect_date').value := copy(s,201,50);
quInsert.Parameters.ParamByName('record_date').value := copy(s,251,8);
quInsert.ExecSQL;
VRS_Main.StatusBar1.Panels[5].Text:=inttostr(strtoint(VRS_Main.StatusBar1.Panels[5].Text)+1);
end;
end;
【问题讨论】:
-
数据库使用什么编码?它甚至被配置为接受 Unicode 吗?
-
是windows sql server 2008 R2
-
您的 SQL 格式错误。在这两行:
sql.add('inspect_date, record_date');和sql.add(':inspect_date, :record_date');上,您分别在record_date和:record_date之后缺少一个结束)。您的 SQL 在执行时看起来像这样:'insert into v_info_2018 (<fields> values (<params>',当它应该看起来像这样时:'insert into v_info_2018 (<fields>) values (<params>)'我很惊讶您没有从数据库中收到关于此的运行时错误。
标签: delphi-6