我在 delphi里有这样的语句:
FQry.SQL.Clear;
SQLStr:='insert into TPassageVHC (FCarNO,FDeviceNO,FType,FPlateColor,FCarLogo,FADDRESS,FCarType,FCarRoad,FCarSpeed,FWatchTime,FOPENTIME,FCLOSETIME,FDesc,FVersion,FDirection,FData) values(';
SQLStr:=SQLStr + '''' + FVHC.CarNO + '''' + ',';
SQLStr:=SQLStr + '''' + FVHC.DeviceID + '''' + ',';
SQLStr:=SQLStr + '''' + 'Z' + '''' + ',';
if FVHC.PlateColor='' then FVHC.PlateColor:=' ';
SQLStr:=SQLStr + '''' + FVHC.PlateColor + '''' + ',';
SQLStr:=SQLStr + '''' + ' ' + '''' + ',';
SQLStr:=SQLStr + '''' + FVHC.Address + '''' + ',';
SQLStr:=SQLStr + '''' + inttostr(FVHC.CarType) + '''' + ',';
SQLStr:=SQLStr + '''' + FVHC.CarRoad + '''' + ',';
SQLStr:=SQLStr + '''' + inttostr(FVHC.CarSpeed) + '''' + ',';
SQLStr:=SQLStr + '''' + DateTimeToStr(FVHC.WatchTime) + '''' + ',';
SQLStr:=SQLStr + '''' + DateTimeToStr(FVHC.RedOpen) + '''' + ',';
SQLStr:=SQLStr + '''' + DateTimeToStr(FVHC.RedClose) + '''' + ',';
SQLStr:=SQLStr + '''' + ' ' +FVHC.Desc + '''' + ',';
SQLStr:=SQLStr + '''' + '1.0' + '''' + ',';
SQLStr:=SQLStr + '''' + inttostr(FVHC.Direction) + '''' + ',';
SQLStr:=SQLStr + ':FData)';
FQry.SQL.Add(SQLStr);
FQry.Parameters.ParseSQL(FQry.SQL.Text,true);
FData.Position:=0;
FQry.Parameters.ParamByName('FData').LoadFromStream(FData,ftBlob);
if strtoint(copy(FVHC.DeviceID,length(FVHC.DeviceID)-1,2))< 49 Then
begin
FQry.ExecSQL ;
end;其他的都正常,但只要加上FData字段,就会报错,报错如下:
第 1 行: ':' 附近有语法错误我很郁闷,我的FData字段是用来存储一个特定格式的文件, 在SQL Server2000里我设置的字段类型是varbinary,不知道设置成这个对不对,请高手帮忙解决,我不知道我该怎么解决了!问题解决就给分!
FQry.SQL.Clear;
SQLStr:='insert into TPassageVHC (FCarNO,FDeviceNO,FType,FPlateColor,FCarLogo,FADDRESS,FCarType,FCarRoad,FCarSpeed,FWatchTime,FOPENTIME,FCLOSETIME,FDesc,FVersion,FDirection,FData) values(';
SQLStr:=SQLStr + '''' + FVHC.CarNO + '''' + ',';
SQLStr:=SQLStr + '''' + FVHC.DeviceID + '''' + ',';
SQLStr:=SQLStr + '''' + 'Z' + '''' + ',';
if FVHC.PlateColor='' then FVHC.PlateColor:=' ';
SQLStr:=SQLStr + '''' + FVHC.PlateColor + '''' + ',';
SQLStr:=SQLStr + '''' + ' ' + '''' + ',';
SQLStr:=SQLStr + '''' + FVHC.Address + '''' + ',';
SQLStr:=SQLStr + '''' + inttostr(FVHC.CarType) + '''' + ',';
SQLStr:=SQLStr + '''' + FVHC.CarRoad + '''' + ',';
SQLStr:=SQLStr + '''' + inttostr(FVHC.CarSpeed) + '''' + ',';
SQLStr:=SQLStr + '''' + DateTimeToStr(FVHC.WatchTime) + '''' + ',';
SQLStr:=SQLStr + '''' + DateTimeToStr(FVHC.RedOpen) + '''' + ',';
SQLStr:=SQLStr + '''' + DateTimeToStr(FVHC.RedClose) + '''' + ',';
SQLStr:=SQLStr + '''' + ' ' +FVHC.Desc + '''' + ',';
SQLStr:=SQLStr + '''' + '1.0' + '''' + ',';
SQLStr:=SQLStr + '''' + inttostr(FVHC.Direction) + '''' + ',';
SQLStr:=SQLStr + ':FData)';
FQry.SQL.Add(SQLStr);
FQry.Parameters.ParseSQL(FQry.SQL.Text,true);
FData.Position:=0;
FQry.Parameters.ParamByName('FData').LoadFromStream(FData,ftBlob);
if strtoint(copy(FVHC.DeviceID,length(FVHC.DeviceID)-1,2))< 49 Then
begin
FQry.ExecSQL ;
end;其他的都正常,但只要加上FData字段,就会报错,报错如下:
第 1 行: ':' 附近有语法错误我很郁闷,我的FData字段是用来存储一个特定格式的文件, 在SQL Server2000里我设置的字段类型是varbinary,不知道设置成这个对不对,请高手帮忙解决,我不知道我该怎么解决了!问题解决就给分!
if FVHC.PlateColor='' then FVHC.PlateColor:=' ';
SQLStr:='insert into TPassageVHC (FCarNO,FDeviceNO,FType,FPlateColor,FCarLogo,FADDRESS,FCarType,FCarRoad,FCarSpeed,FWatchTime,FOPENTIME,FCLOSETIME,FDesc,FVersion,FDirection,FData) values('
+QuotedStr(FVHC.CarNO)+','
+QuotedStr(FVHC.DeviceID)+','
+'Z,'
+QuotedStr(FVHC.PlateColor)+','
+'' ','
+QuotedStr(FVHC.Address)+','
+inttostr(FVHC.CarType)+','
+QuotedStr(FVHC.CarRoad)+','
+inttostr(FVHC.CarSpeed)+',';
+DateTimeToStr(FVHC.WatchTime)+','
+DateTimeToStr(FVHC.RedOpen)+','
+DateTimeToStr(FVHC.RedClose)+','
+ ' ' +QuotedStr(FVHC.Desc)+','
+'1.0','
+inttostr(FVHC.Direction)+','
+':FData)';
showmessage(SQLStr);//出现窗口的时候按ctrl+C复制 然后粘贴到sql面板里面看看有没有问题
FQry.SQL.Add(SQLStr); FQry.Parameters.ParseSQL(FQry.SQL.Text,true);
FData.Position:=0;
FQry.Parameters.ParamByName('FData').LoadFromStream(FData,ftBlob);
if strtoint(copy(FVHC.DeviceID,length(FVHC.DeviceID)-1,2)) < 49 Then
begin
FQry.ExecSQL ;
end;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
... fill memory stream with data ...
ADOQuery1.Parameters[4].LoadFromStream(MS);
finally
if assigned(MS) then
MS.Free;
end;
end;
if FVHC.PlateColor='' then FVHC.PlateColor:=' ';
SQLStr:='insert into TPassageVHC (FCarNO,FDeviceNO,FType,FPlateColor,FCarLogo,FADDRESS,FCarType,FCarRoad,FCarSpeed,FWatchTime,FOPENTIME,FCLOSETIME,FDesc,FVersion,FDirection,FData) values('
+QuotedStr(FVHC.CarNO)+','
+QuotedStr(FVHC.DeviceID)+','
+'Z,'
+QuotedStr(FVHC.PlateColor)+','
+'' ','
+QuotedStr(FVHC.Address)+','
+inttostr(FVHC.CarType)+','
+QuotedStr(FVHC.CarRoad)+','
+inttostr(FVHC.CarSpeed)+',';
+DateTimeToStr(FVHC.WatchTime)+','
+DateTimeToStr(FVHC.RedOpen)+','
+DateTimeToStr(FVHC.RedClose)+','';
//showmessage(SQLStr);//出现窗口的时候按ctrl+C复制 然后粘贴到sql面板里面看看有没有问题
FQry.SQL.Add(SQLStr);
FQry.SQL.ADD(' ' +QuotedStr(FVHC.Desc)+','
+'1.0','
+inttostr(FVHC.Direction)+','
+':FData)'); FQry.Parameters.ParseSQL(FQry.SQL.Text,true);
FData.Position:=0;
FQry.Parameters.ParamByName('FData').LoadFromStream(FData,ftBlob);
if strtoint(copy(FVHC.DeviceID,length(FVHC.DeviceID)-1,2)) < 49 Then
begin
FQry.ExecSQL ;
end;
showmessage(FQry.sql.text);//看一下是不是你想要插入的數據,可能只有到:Fdata後面就沒有了吧.
if strtoint(copy(FVHC.DeviceID,length(FVHC.DeviceID)-1,2)) < 49 Then
begin
FQry.ExecSQL ;
end;
要不然只能: 使劲儿插
我觉得直接写sql好乱,为什么不用FieldByName('').... = ....来做呢,这样我觉得比较清楚
大二进制数据,用参数往里插 ,直接插是不行的.
建议你放个断点,看看这个测试是什么,是不是含有对sql来说是不可以用的字符。
分开写