关于adotable动态指定表名的问题(10分)

  • 主题发起人 主题发起人 lebronjames
  • 开始时间 开始时间
L

lebronjames

Unregistered / Unconfirmed
GUEST, unregistred user!
需要根据EDIT.TEXT里不同的值来确定ADOTABLE.TABLENAME这个属性,也就是动态指定adotable的表名,请问如下的代码哪儿有问题呢?我编译时总提示:表不存在,但是表是确实存在的,位于SQL2005里面.<br>=============<br>//假设某表名是123<br>with adoquery1 do<br> begin<br> adoquery1.Close ;<br> adoquery1.SQL.Clear;<br> adoquery1.SQL.Add('select * from atoa where 1=1');<br> sql.add('and (网站=:wangzhan)');<br> parameters.parambyname('wangzhan').value:=combobox1.Text;<br> adoquery1.Active:=true;<br> if adoquery1.Recordset.RecordCount=1 then<br> begin<br> adoconnectiona.Connected:=false;<br> edit19.Text:=adoquery1.FieldByName('表名').AsString ;<br> adotablea.tablename:=edit19.Text;//这里指定表名的字符串.<br> adoconnectiona.Connected:=true;<br> adotablea.Active:=true;//运行到这里的时候就报错说表找不到.<br> end;<br> end;<br> end;<br>============<br>是不是表名的字符串应当包含扩展名?
 
你跟踪一下看看表名是不是正确.然后<br>adoconnectiona.Connected:=false;<br> adotablea.Active := False; &nbsp;//加上这句.<br> edit19.Text:=adoquery1.FieldByName('表名').AsString ;<br> adotablea.tablename:=edit19.Text;//这里指定表名的字符串.<br> adoconnectiona.Connected:=true;<br> adotablea.Active:=true;//运行到这里的时候就报错说表找不到.
 
谢谢,表名就在我本机上,本机又做SQL服务器端又做客户端的.<br>我在TABLENAME里面指定表名了运行就一切OK,但是在程序运行时变换表名就出错.提示表没找到.<br>我加了那个adotablea.Active := False;依然报错..
 
你跟踪一下看看表名<br>再加一句<br>adotablea.connection := Adoconnectiona;<br>你的ADOTABLE 和ADOQUERY是连的一个Adoconnection 吗?如果是的话不行,因为你把Adoconnectiona关闭了.这时AOQUERY已经没有数据了.所以表名也是空的.
 
请问列举全部表名怎么写?<br>ADOConnectiona.OpenSchema(siTables, EmptyParam, EmptyParam, ADODataSet1);<br>这个过程的返回值怎么获得?
 
什么数据库阿,如果是SQLSERVER可以到SYSOBJECT表中去找.
 
SQL2005的数据库,我全部试过了, dbo.123,123.mdf 这些...全部失败
 
123.mdf 还有这样的表!
 
谢谢你的思路,我已经发现问题了,SQL2005里面我定义的是CHAR类型,长度是20,不足20的时候,后面以空格补足20个字符的,所以那些记录就多了那些空格.因此取出来做表名就会报错.<br>我加了个TRIM()函数处理EDIT19.TEXT,就可以了.顺利通过.<br>多问下,怎么在SQL里面设置没有那些空字符啊?
 
定义数据类型为VARCHAR的,保存时保存实际长度.
 
谢谢,正解啊薄分请笑纳
 

Similar threads

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