关于SQL的问题.(实在没分了,要不给你寄点钱?)(0分)

  • 主题发起人 主题发起人 wilsonlee
  • 开始时间 开始时间
W

wilsonlee

Unregistered / Unconfirmed
GUEST, unregistred user!
有点怪,比如我有一个数据表score.db,结构如下
第一个字段 Name:Line Type:N
第二个字段 Name:Indicator Type:N
在先前的语句中我想删除某一记录,我用这样的语句:
With Query1 do
begin
Close;
SQL.Clear;
SQL.Add('Delete from score.db where Line=:Line1');
ParamByName('Line1').AsInteger:=StrToInt(Edit1.Text);
ExecSQL;
end;
上面的EDIT1,我假设有一个edit组件,用来输入行号.这条语句编译和运行都没问题.
可是我想插入一条记录,我用
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into score.db (Line,Indicator) values (:Line2,:Indcator2)');
ParamByName('Line2').AsInteger:=StrToInt(Edit1.Text);
ParamByName('indicator2').AsInteger:=StrToInt(Edit2.Text);//同理,edit2是一个组件,用来输入INDICATOR
ExecSQL;
end;
编译没问题,一运行,总提示'类型不匹配' Type Mismatch in the expression.
这个问题困扰我很久了,用
SQL.Add('Insert into score.db (line,Indicator) values (1,2)');
也就是用具体的数字,可行.
我又改,将score.db的字段改成字符型.
上面的sql语句改为:
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into score.db (Line,Indicator) values (:Line2,:Indcator2)');
ParamByName('Line2').AsString:=Edit1.Text;
ParamByName('indicator2').AsString:=Edit2.Text;//同理,edit2是一个组件,用来输入INDICATOR
ExecSQL;
end;
也可行.
不知道为什么在插入记录的时候会提示类型不匹配?
多谢指教!
 
傻鄙:
應為字符型
 
SB,没本事就别乱骂人,
我告诉你,我解决这个问题了,只要把上述语句改为:
ParamByName('Line2').AsFloat:=StrToFloat('Edit1.Text');
ParamByName('Indicator2').AsFloat:=StrToFloat('Edit2.Text');
就行了.
我觉得很不愉快,看你用的是繁体,是香港或是台湾的吧?语言不象啊.
 
lgw3,也有你这样的人吗?
别人不会可以来交流,你这样说,是人话吗?
楼上的兄弟已回答了,
哎,又来晚了,会的总有人比我先说,呵呵。
 
看不出有什么问题,逻辑上应该没有错的,大概计算机太累了,要抗议!
 
还是我来自问自答吧:
出现这样的问题主要还是对建立数据表时用的数据类型理解不深,N,I分别代表浮点数和整数
所以我开始选用N,在数据转换上就有点问题,后来我把数据类型改为I,后上面的语句都没问题
了.
To 杰克 Thank You
To decade-Hai 不知道说计算机太累了,是因为我写的语句太不精练了,还是只是玩笑?
 
有smallint 这一类型,如果以后遇到这样情况,可以用select ,add all fields,然后就
可以看到类型了
 
我用的是Database Desktop,那里面在选择类型的时候,好象只有N,S(short int),I(Long Int)
与此话题有关.
另外你说的select and add all fields,是怎么处理?
愿闻其详?
多谢!
 

Similar threads

后退
顶部