问大家一个问题。我用ODBC连接的服务器的SQL Server2000数据库。现在想往数据库里添加一条记录,用以下两种方法总显示出错。不知何故,高手请帮忙,马上给分
数据库格式如下:
id 自增1
jlrq 日期型
bumen char型
tuanhao char型
zhaiyao char型
shouru 整型
zhichu 整型
zhgl char型
lrr char型
lsh char型
rz char型
lb char型
rs 整型方法1.
  if (Trim(ComboBox1->Text)=="收入")
   {
    sss="insert into htllsz_mingxi(jlrq,bumen,tuanhao,zhaiyao,shouru,zhichu,zhgl,lrr,lsh,rz,lb,rs) values("+DateTimePicker1->Date+",'"+lshbm+"','"+Trim(Edit2->Text)+"','"+Trim(Edit3->Text)+"',"+StrToInt(Trim(Edit4->Text))+",0,'无','"+Trim(Form1->yh->Caption)+"','"+p+"','否','"+Trim(ComboBox1->Text)+"',"+StrToInt(Trim(Edit5->Text))+")";
   }
  else
   {
    sss="insert into htllsz_mingxi(jlrq,bumen,tuanhao,zhaiyao,shouru,zhichu,zhgl,lrr,lsh,rz,lb,rs) values("+DateTimePicker1->Date+",'"+lshbm+"','"+Trim(Edit2->Text)+"','"+Trim(Edit3->Text)+"',0,"+StrToInt(Trim(Edit4->Text))+",'无','"+Trim(Form1->yh->Caption)+"','"+p+"','否','"+Trim(ComboBox1->Text)+"',"+StrToInt(Trim(Edit5->Text))+")";
   }
  Form3->Query1->RequestLive=true;
  Form3->Query1->Active=false;
  Form3->Query1->SQL->Clear();
  Form3->Query1->SQL->Add(sss);
  Form3->Query1->ExecSQL();
方法2.
  Form3->Query1->RequestLive=true;
  Form3->Query1->Insert();
  Form3->Query1->FieldValues["jlrq"]=DateTimePicker1->Date;
  Form3->Query1->FieldValues["bumen"]=lshbm;
  Form3->Query1->FieldValues["tuanhao"]=Trim(Edit2->Text);
  Form3->Query1->FieldValues["zhaiyao"]=Trim(Edit3->Text);
  if (Trim(ComboBox1->Text)=="收入")
   {
    Form3->Query1->FieldValues["shouru"]=Trim(Edit4->Text);
    Form3->Query1->FieldValues["zhichu"]=0;
   }
  else
   {
    Form3->Query1->FieldValues["shouru"]=0;
    Form3->Query1->FieldValues["zhichu"]=Trim(Edit4->Text);
   }
  Form3->Query1->FieldValues["zhgl"]="无";
  Form3->Query1->FieldValues["lrr"]=Trim(Form1->yh->Caption);
  Form3->Query1->FieldValues["lsh"]=p;
  Form3->Query1->FieldValues["rz"]="否";
  Form3->Query1->FieldValues["lb"]=Trim(ComboBox1->Text);
  Form3->Query1->FieldValues["rs"]=Trim(Edit5->Text);
  if(Form3->Query1->State==dsEdit)
  {
   Form3->Query1->Post();
  }

解决方案 »

  1.   

    你是在delphi实现的吗 把""换成 '' 后看看怎么样 用"" 是不行的
      

  2.   

    我用BCB6作的,以往用""是好使的。
      

  3.   

    你的做法没有什么问题啊,可能是你字段类型和数值不符合或者会不会是你ODBC设置有问题啊!把你的错误信息贴出来啊!
      

  4.   

    Query1:Cannot modify a read-only dataset.
    我加Form3->Query1->RequestLive=true;语句啦
    拜托各位。谢谢。
      

  5.   

    是不是你把Query1设置为只读了
      

  6.   

    说错了,应该是你Query1的记录源设置为只读。
    在你的第2种方法前加入
      ss= 'select top 0 * htllsz_mingxi'
      with Form3->Query1 do
      {
        Close;
        Sql->Text = ss;
        Open;
       }
    试试行不行Form3->Query1->Close;
    Form3->Query1->
      

  7.   

    你有没有用session控件啊,用它有时也会出错的。另一可能就是改变数据为只读了,去点就可以了!
      

  8.   

    怎么样改变Query控件的只读?我没有用session控件
      

  9.   

    楼主把游标的位置设置为“客户端”试试。
    Form3->Query1->CursorLocation = clUseClient; //在Delphi中是设置为这个值,在BCB中记得也是设置为这个,如果不是楼主就自己再查一下吧,反正就是这个意思。对于像ACCESS这种的本地数据库系统可以不用考虑游标位置,但是对于SQLserver或者Oracle等这种大型数据库系统就一定要主意这个问题了。游标在“服务端”的话便于时事响应数据库的变化,但是代价就是楼主遇到的这种莫名其妙的情况了,所以如果对数据的时事性要求不高的化就用“客户端”模式就完全应付的了。
      

  10.   

    Append();
    故障依旧。。
    Query1:Cannot modify a read-only dataset.
    ====================
    天啊,是不是BCB6整我啊。
      

  11.   

    说得再具体点。
    我把在登录窗体中放入了三个Query控件和一个Database控件
    控件的设置如下(为了不出现数据库的登录窗对话框):
    DATABASE NAME=lsz_database
    USER NAME=huguangtao
    ODBC DSN=lsz
    OPEN MODE=READ/WRITE
    SCHEMA CACHE SIZE=8
    SQLQRYMODE=
    LANGDRIVER=
    SQLPASSTHRU MODE=SHARED AUTOCOMMIT
    SCHEMA CACHE TIME=-1
    MAX ROWS=-1
    BATCH COUNT=200
    ENABLE SCHEMA CACHE=FALSE
    SCHEMA CACHE DIR=
    ENABLE BCD=FALSE
    ROWSET SIZE=20
    BLOBS TO CACHE=64
    PASSWORD=23230119750515001216117
    USERNAME=huguangtao
    整个程序所有用到的数据库操作都是利用登录窗体(Form3)中的Query控件。
    但我发现。修改记录好使,就是插入记录不行,不知道为什么。大家帮帮忙。