对ADOCOMMAND和SQL语句比较熟的朋友进来看看

qdxby 2002-07-03 11:15:37
如果用户在Edit1中输入学号(在数据库中是CHAR),在Edit2中输入年龄(在数据库中是INT),点击Button3实现插入功能
DataModule2->ADOCommand1->CommandText="INSERT INTO 个人资料(学号,年龄) values("+Edit1->Text+",66)";
void __fastcall TForm1::Button3Click(TObject *Sender)
{
DataModule2->ADOCommand1->CommandText="INSERT INTO 个人资料(学号,年龄) values("+Edit1->Text+",StrToInt(Edit2->Text))";
//上面这句哪里写错了?另外如果我只插入Edit1的值,想插入"00001",实际插入的是"1"
如果还有字段 货币(货币类型)、日期(DATA)、图片(IMAGE)具体应该怎么插入啊
DataModule2->ADOCommand1->Execute();
}
...全文
28 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
comanche 2002-07-06
  • 打赏
  • 举报
回复
上面的 日期型, 货币型和图片 insert 的方法是
日期型 :xxDate 定义类型为 Date, ParamValues['xxDate'] 可以用 TDateTime,TTime , TDate 的对象

货币型无所为, 类型是 float, Currency, int, real, double的常量或变量都可以,其中 int 和 Currency 是精确的数字, Currency 是定点数范围请参考 Currenty type 帮助。

Blob 类型比较麻烦,要调用 ado function, 提供一个简单的方法是,利用ADOQuery 或 ADOTable, 用UpdateBatch 作三大操作(insert, modify and delete), 而image 字段就是个 TBlobField, CreateBlobStream 建立一个流,然后 LoadFromStream or LoadFromFile 就可以实现了, 关于 CreateBlobStream 请参考帮助 TCustomADODataSet,CreateBlobStream
comanche 2002-07-06
  • 打赏
  • 举报
回复
这样的写法不好,
你应该在 Command 中写到
INSERT INTO 个人资料(学号,年龄) values(:No,66)

然后在 Parameters 中定义 No 的类型和方向(Input or Output)

最后在程序中写到 xxxCommand.Parameters.ParamValues['No'] := 'abcd'

Borland 公司的 ADO 控件在设计期时有不少 Bug, 比方
1.在写语句前你必须先指定 Connection, 要不然 Parameters 中会没有东东
2.有时会出现 改了一个语句后,不能执行, 看 SQL Monitor 中跟本没有语句被执行。这种情况的原因是,Command 被 prepare 成了一个Store procedure. 当改动了语句时,没有更新这个prepare 好的过程。你上面的作法很有可能会出现这种设计期错误。
3. Parameters 中的每个参数都要给个默认值, 要不然提示至少有一个参数没赋值, 语句不能执行。

在运行期也有一个错误,当参数类型是 字符时, 因为 ADO 自动认为是 unicode ,所以内容是中文时长度会少一半....,非Ansi 字符集的用户都会有这种错. 所以你要在 BeforeGetRecords 或 AfterGetParams 中写到 xxxParams.Size := Length(xxxParams.Value) 修正这个长度
钛哥 2002-07-06
  • 打赏
  • 举报
回复
同意
JamesJiang 2002-07-04
  • 打赏
  • 举报
回复
同意pazee(耙子)
但你的“年龄”字段是int型的话,写入的肯定就是一个0x00000001的二进制的值,0001只是在显示输出的时候进行一下格式控制而已。
耙子 2002-07-03
  • 打赏
  • 举报
回复
字符串需要用''引起来
DataModule2->ADOCommand1->CommandText=
"INSERT INTO 个人资料(学号,年龄) values('" + Edit1->Text+ "'," + StrToInt(Edit2->Text) + ")";

1-〉00001需要你自己转化了
货币和浮点数一样操作,
日期用''引起来
图片用blob字段

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧