都说“查询,添加,修改,删除,只要写SQL语句就行”,我的三个语句却总是出错!!!

alang_xy 2002-07-12 08:06:18
//删除表中的所有记录
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("DELETE * From barcord");
ADOQuery1->ExecSQL();
//报"sql语句属性不对"

//新建一张表
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("CREAT TABLE NewBarcord (SN,CHAR(20))");
ADOQuery1->ExecSQL();
//报"sql语句属性不对"(是否是建了表之后马上要建主键、索引?)

//用TADOTable组件,删除表中所有记录,也总是错!
ADOTable1->Close();
ADOTable1->Open();
ADOTable1->DeleteRecords(arAll);
//马上就在第三句报错

各位,我知道这不是BCB的问题,是我不会用的问题,但是它的资料也太少了,特别是BCB能用的SQL语法,我找遍了天下都没有BCB自己关于它的资料。它自己只有一个"local sql",是用于debase库的,不能用。我用的是Access库,查msdn只能差到用SQL Server的,有些不一样的。各位,我烦死了,为什么BCB的资料这么少???
...全文
129 点赞 收藏 24
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
alang_xy 2002-07-14
谢谢各位老大的帮忙。再次感谢帮主的现身,不胜荣幸啊!呵呵。
回复
孩皮妞野 2002-07-12
TR@SOE兄你好啊!最近在忙什么啊?
回复
TR@SOE 2002-07-12
ALNG好9不见。

ALNG/JSP都说的很完整了。还是建议你多自己研究研究。BCB的文档不是太多,也不是很少。象你提的三个问题,前两个只要有简单的SQL基础就可以搞定了。有问题还是多想想。
回复
孩皮妞野 2002-07-12
已给你回了短消息。

SQL语句中表名是不可以用参数来传递的。
应该这样:

String sql = "Create table [" + Edit1->Text + "](SN Char(20))";

其中用[]把表名包起来是微软的用法,其他有用""的,根据具体情况而定。
回复
alang_xy 2002-07-12
to ALNG(?) ( ):我打上去是少了一个"e",中间的逗号去掉了就搞定了。不过我想传入参数作为表名又出了问题:
ADOQuery1->SQL->Add("CREATE TABLE :NewBarcord (SN CHAR(20) PRIMARY KEY)");
ADOQuery1->Parameters->Clear();
ADOQuery1->Parameters->ParamByName("NewBarcord")->Value = (edtEdit1->Text);//这样不行;
ADOQuery1->Parameters->ParamByName("NewBarcord")->Value = (edtEdit1->Text).c_str;//这样也不行;
昨天搜索到一个贴子,说是用冒号传参数有奇怪的问题,大家也可去看看。如果用冒号传参数问题多多也只能用Sql接龙的方式搞了。
http://www.csdn.net/expert/topic/625/625004.xml?temp=.2629206

to jishiping(JSP 季世平) ( ) :
你的if (ADOTable1->Supports(TCursorOptions()<<coDelete))
ADOTable1->DeleteRecords(arAll);
我看了,也就是说用这种方法还是删除不了。算了,还是用sql语句来吧。

谢谢各位老大,问如此简单的问题我真是脸红。大部分自已研究研究鼓倒鼓倒也就出来了。但是如果各位用BCB都是这么过来的,那我说这种效率太低了,因为文档太少了,你再研究一遍只不过得到同样的结论,并且都是不是什么高深的问题,有研究价值的。
所以,我目前用BCB很累,总是卡在小地方,不知各位老大是不是都是自己鼓捣过的?
回复
tz5001 2002-07-12
问题1,请先将ADDQuery1关闭。再试试。
//删除表中的所有记录
ADDQuery1->SQL->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("DELETE * From barcord");
ADOQuery1->ExecSQL();
问题2,请先将ADDQuery1关闭。"create"为创建,少了一个"e".
//新建一张表
ADDQuery1->SQL->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("CREATE TABLE NewBarcord (SN CHA(20))");
ADOQuery1->ExecSQL();
问题3,直接用SQL的“delete"删除表不行吗??
回复
jerrymousenet2 2002-07-12
//删除表中的所有记录
ADOQuery1->SQL->Clear();
//ADOQuery1->SQL->Add("DELETE * From barcord");
ADOQuery1->SQL->Add("DELETE From barcord ");
ADOQuery1->ExecSQL();

//新建一张表
ADOQuery1->SQL->Clear();
//ADOQuery1->SQL->Add("CREAT TABLE NewBarcord (SN,CHAR(20))");
"IF EXISTS (SELECT * FROM SysObjects WHERE Name = "NewBarcord " and Type = "U")
DROP TABLE NewBarcord
GO //先断定表是否存在,已存在的话要先删除表才行
或直接Drop Table NewBarcord
Create Table NewBarcord (SN,(CHAR(20)) go"
ADOQuery1->ExecSQL();

//用TADOTable组件,删除表中所有记录,也总是错!
ADOTable1->Close();
ADOTable1->Open();
ADOTable1->DeleteRecords(arAll);
可能是你的ADOTable1的某个属性设置不对
//马上就在第三句报错
回复
chensy0626 2002-07-12
你的第二个问题:好像CREATE写错了吧,少写了一个'E'
回复
chensy0626 2002-07-12
你的第二个问题:好像CREATE写错了吧,少写了一个'E'
回复
孩皮妞野 2002-07-12
我上面的不能解决第2个问题吗?

你的creat少了一个e, 是 create

CREAT TABLE NewBarcord (SN CHAR(20))

我只写出了SQL语句,你没有看明白吧?


回复
kernelspirit 2002-07-12
CB和Dephi其实很相近,不懂时可以借鉴Dephi地!
回复
jishiping 2002-07-12
1.
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("DELETE From barcord");
ADOQuery1->ExecSQL();
2.
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("CREATE TABLE NewBarcord (SN CHAR(20))");
ADOQuery1->ExecSQL();

3. 不是所以的数据库都支持
ADOTable1->Close();
ADOTable1->Open();
if (ADOTable1->Supports(TCursorOptions()<<coDelete))
ADOTable1->DeleteRecords(arAll);
回复
傻乐tao 2002-07-12
delete 语句中不需要用* delete from tablename就可以了。
回复
xhfjy 2002-07-12
老大,自己找本书看看
回复
windows_editor 2002-07-12
使用前先连接, connect呢?????????????
回复
alang_xy 2002-07-12
1、
第一个问题,把中间的*号去掉就行了,我查的是VB中的SQL语句,它用的就是ACCESS库,所以这样一改就成了。当然,我把CursorType 改成 ctKeyset了。问题是VB里面用ADO的语句与BCB的又是不一样的,不过我看的懂,我以前就是用VB、ASP的,所以在BCB下也喜欢用ADO。
2、3还在努力。
回复
孩皮妞野 2002-07-12
copy错了,更正一下:

CREAT TABLE NewBarcord (SN CHAR(20));

关于第3个问题,字面上没问题吧,帮助里面有这么一段,是说你的数据集可能不支持纪录删除。
If the recordset does not support record deletions, an exception is thrown. Use the Supports method to determine whether the recordset supports deleting records.

回复
kingcaiyao 2002-07-12
添加:
MyQuery->Close();
MyQuery->SQL->Clear();
MyQuery->SQL->Add("insert into table(field1...)values(:Param1,....)");
MyQuery->ParamByName("Param1")->AsString or AsDataTime=your value;
MyQuery->ExecSQL();
删除:
MyQuery->Close();
MyQuery->SQL->Clear();
MyQuery->SQL->Add("delete * from yourtable");
MyQuery->ExecSQL();
更新:
MyQuery->Close();
MyQuery->SQL->Clear();
MyQuery->SQL->Add("update table set field=:value...");
MyQuery->ParamByName("value")->AsDataTime or other=your value;
MyQuery->ExecSQL();
在对数据集操作之前,需要先将数据集关闭。
别外,如果你需要返回游标,则调用Open方法(比如说查询符合条件的记录 select),如果不需要则用ExecSQL方法
回复
Chimae 2002-07-12
SQL语句的格式要看你用的是什么数据库,看他是否支持!
回复
孩皮妞野 2002-07-12
DELETE From barcord;// remove the star

CREAT TABLE NewBarcord (SN CHAR(20))"); // remove the comma
回复
加载更多回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2002-07-12 08:06
社区公告
暂无公告