小问题:如何给数据库中的逻辑变量赋值?(20分)

  • 主题发起人 主题发起人 yanyuwuhen
  • 开始时间 开始时间
Y

yanyuwuhen

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚弄数据库,用的是bde的table,当我用query.sql更新数据时:
set IsTrue=?? 时,不知该写什么?我用TRUE,FALSE,True,False,0,1试过都不行,
请问该布尔值该如何赋值到数据库中?
 
true和false啊,实在不行,用参数形式。
比如
query1.Close;
query1.SQL.clear;
query1.sql.add('insert into gs_hytable values(:mc,:ydxss,:ydje,:hyksrq,:hyjsrq)');
query1.Params[0].asstring:=wwtable1.fieldbyname('mc').asstring;
query1.Params[1].asinteger:=wwtable1.fieldbyname('ydxss').asinteger;
if wwtable1.fieldbyname('ydje').asstring='True' then
query1.Params[2].asboolean:=true
else
query1.Params[2].asboolean:=false;
query1.Params[3].asdatetime:=wwtable1.fieldbyname('hyksrq').asdatetime;
query1.Params[4].asdatetime:=wwtable1.fieldbyname('hyjsrq').asdatetime;
query1.ExecSQL;
 
分是少了点,但问题也简单
0等价于false
1等价于true
 
to kanny_chen
我这样写不行: 'Set before=0 '?该如何写?
to SoftBoy
如果我是更新记录,如何将动态参数与表中的变量联系起来?
queryRun.close;
queryRun.sql.clear;
queryRun.SQL.add('UPDATE "run.db" valuse(:Isbefore)';
queryRUn.ParamByName('Isbefore').AsBoolean:=false;
queryRun.sql.add('where??)
queryRun.prepare;
queryRun.ExecSQL;
 
分少么?哎,我初次用数据库,这对大家来说应该只是一句话的问题啊!
 
你使用什么数据库?
 
我是在database desktop中建的table
 
你使用它建立的是Paradox7数据库吧?
它的逻辑字段类型是Logical,使用下面的语句就可以了。
也就是说使用True和False来判断真假。
下面语句实验通过。

with Query1 do
begin
Close;
SQL.Text := 'Select * from aaa where col2=True';
Open;
end;
 
更新这样使用。
下面 将所有的Col2全部设置为False
with Query1 do
begin
Close;
SQL.Text := 'Update aaa Set col2=False';
ExecSQL;
end;
 
注意打开使用Open,更新、删除使用ExecSQL,两个不同。
一般来说,Open需要返回数据,ExecSQL,不需要返回数据。
 
我就是这样写的:
queryRun.close;
queryRun.sql.clear;
queryRun.SQL.add('UPDATE "run.db" ');
queryRun.SQL.Add('Set Before=False;');
sqlcomd:='where userId= '+''''+edituserId.text+''''+';';
queryRun.sql.Add(sqlcomd);
queryRun.prepare;
queryRun.ExecSQL;
按道理应该没问题呀!
但是提示错误:
Invalid use of keyword
tabken: before=false
where
line number 2
 
老大,你第二行的“;”是做什么的?
 
queryRun.SQL.Add('Set Before=False');
sqlcomd:='where userId= '''+edituserId.text+''';
 
SQL语句中不需要分号!除非在SQL Plus(Oracle)里面才需要,否则等于画蛇添足!
 
SQL中设定变量不是‘:a1‘这种方式么?
还有:带:Isbefore的是我仿照softboy用动态参数写的,最新的是我原来在程序中用的,更
新其它类型的数据没问题,但loagical类型的就出错!
 
哦,那个分号是因为程序提示token串有错误,我为了分开where加的,我这就去掉;但是这样
也会出错的!
 
对于参数,那是使用“:”,而不是分号!而对于你写的那个里面没有设计参数呀。
所谓的参数,如下:
SQL.Text:='Select * from Table1 Where Col2=:col2_value';
ParamByName('col2_value').AsString:='aaa';
 
with queryRun do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE 你的表名');
SQL.Add('Set Before=False');
SQL.Add('where userId= ''' + edituserId.text + '''');
prepare;
ExecSQL;
end;
 
估计那个应该不是原因,还是set before=false这处出的问题?
因为当我写 set UserName='abc'时就什么问题也没有!
 
还有,尽量不要写成Update "run.db",我没有实验过这样是否可以,不过尽量使用BDE的别名机制。
同时,你需要找一本设计Delphi数据库的书,仔细看起,至少需要掌握基础的,然后才能做。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
923
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部