我在 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,不知道设置成这个对不对,请高手帮忙解决,我不知道我该怎么解决了!问题解决就给分!

解决方案 »

  1.   

        FQry.SQL.Clear;
        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;
      

  2.   

    以上各个字段 除了'FData',其他字段都没问题,我都测试过了,就是加上'FData'就不行,但又不知道错在哪里了,请高手赐教!!急
      

  3.   

    里面有非法值吧,把这个SQL值拿出来看一下,有没有...'单引号噢,就是在执行前先把SQL语句给拿到MEMO1.LINES.ADD(SQLstr),你看一下SQL里面的值是否正确.可以把SQLstr这个值,自己拿到SQLSERVER中自己测试一下,或复制到网上,让大家看一下.
      

  4.   

    var
      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;
      

  5.   

    应该是你的FData字段类型定义的问题
      

  6.   

    在你插入的進修Fdata是排在最後吧,而Adoquery.sql.text最多只能有255個字符,所以要分多個來寫如下看可不可以:    FQry.SQL.Clear;
        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;
      

  7.   

    如果還是不行,你在    FQry.Parameters.ParamByName('FData').LoadFromStream(FData,ftBlob);
        showmessage(FQry.sql.text);//看一下是不是你想要插入的數據,可能只有到:Fdata後面就沒有了吧.
        if strtoint(copy(FVHC.DeviceID,length(FVHC.DeviceID)-1,2)) < 49 Then
        begin
          FQry.ExecSQL ;
        end;
      

  8.   

    在SQL Server2000里FDATA我设置的字段类型是varbinary,这段代码以前是我查ORACLE10的代码,是可以用的,一点问题没有,现在数据库要转型,我把ORACLE里的BLOB字段改成了 现在SQL Server的varbinary字段,请高手救救我,我很郁闷,不对,是超郁闷!!
      

  9.   

    给你个建议,你先把除fdata字段之外的添加到数据库,然后修改记录导入fdata字段的值试试。
      

  10.   

    除fdata字段之外的添加到数据库,我已经测试过了 没问题 ,问题就是 FDATA,我不知道是我表中字段设置的不对,还是我语句有问题,在SQL Server2000里FDATA我设置的字段类型是varbinary,
      

  11.   

    把FDATA的数据类型改成image试试,varbinary类型不得超过8K,image可以超过8K
      

  12.   

    针对varbinary、image等二进制字段,应该是以流的方式存入表中,建议以参数的形式更新这条记录
      

  13.   

    不要写成sql语名, 用table 或query 打开数据表, append 或  insert 赋值 post.
    要不然只能: 使劲儿插
      

  14.   


    我觉得直接写sql好乱,为什么不用FieldByName('').... = ....来做呢,这样我觉得比较清楚
      

  15.   

    VARCHAR 只支持8000个字 ,注意格式。
      

  16.   

    建议楼主不要那样写SQL.用Format,否则N天后,光看那个++++就晕到了.
    大二进制数据,用参数往里插 ,直接插是不行的.
      

  17.   

    可以能是你的参数值出了问题,varbinary 这个类型的数据,可以是不是可识别的。
    建议你放个断点,看看这个测试是什么,是不是含有对sql来说是不可以用的字符。
      

  18.   

    SQLStr:=SQLStr + ':FData)'; 
    分开写