问大家一个问题。我用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();
}
数据库格式如下:
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();
}
我加Form3->Query1->RequestLive=true;语句啦
拜托各位。谢谢。
在你的第2种方法前加入
ss= 'select top 0 * htllsz_mingxi'
with Form3->Query1 do
{
Close;
Sql->Text = ss;
Open;
}
试试行不行Form3->Query1->Close;
Form3->Query1->
Form3->Query1->CursorLocation = clUseClient; //在Delphi中是设置为这个值,在BCB中记得也是设置为这个,如果不是楼主就自己再查一下吧,反正就是这个意思。对于像ACCESS这种的本地数据库系统可以不用考虑游标位置,但是对于SQLserver或者Oracle等这种大型数据库系统就一定要主意这个问题了。游标在“服务端”的话便于时事响应数据库的变化,但是代价就是楼主遇到的这种莫名其妙的情况了,所以如果对数据的时事性要求不高的化就用“客户端”模式就完全应付的了。
故障依旧。。
Query1:Cannot modify a read-only dataset.
====================
天啊,是不是BCB6整我啊。
我把在登录窗体中放入了三个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控件。
但我发现。修改记录好使,就是插入记录不行,不知道为什么。大家帮帮忙。