PDA

View Full Version : ExecSQL



maisam57
شنبه 01 اردیبهشت 1386, 12:09 عصر
به این درستور توجه کنید


with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into table1(id,fname,lname) values(:x,:x2,:x3)');
Parameters.ParamByName('x').Value:=Edit1.Text;
Parameters.ParamByName('x2').Value:=Edit2.Text;
Parameters.ParamByName('x3').Value:=Edit3.Text;
ExecSQL;
end;
ShowMessage(ADOQuery1.FieldValues['id']);

چرا برای دستور دوم showmessage پیغام زیر رو میده
در ضمن نمیخوام از select بعد از دستور execsql استفاده کنم میخوام یه رکورد که ثبت شد بانکم روی همین رکورد قرار بگیره در صورتی که بعد از execsql میاد رکورد اول
اینم پیغام خطاش

ghabil
شنبه 01 اردیبهشت 1386, 13:18 عصر
فیلد ID نداری توی دیتابیست دیگه!

maisam57
شنبه 01 اردیبهشت 1386, 16:11 عصر
ببخشید پس اون کلمه id که بعد از insert نوشتم چیه 'insert into table1(id

ghabil
شنبه 01 اردیبهشت 1386, 16:48 عصر
فیلد ID در Tableت توی دیتابیس نیست، مثلا برو تو اکسس ببین اسم فیلد ID هست؟ بعد هم فیلد ID مغمولا AUtoNumber هست نیازی به پر کردنش نیست اصلا نمیخواد توی Insert بزاری (اگر AutoNumber)

SYNDROME
شنبه 01 اردیبهشت 1386, 23:20 عصر
با سلام
شاید فیلد را به ADOQuery اضافه نکرده ای.

ghabil
شنبه 01 اردیبهشت 1386, 23:57 عصر
ADOQuery چرا اصلا باید از ADOCommand استفاده کنی

maisam57
یک شنبه 02 اردیبهشت 1386, 07:19 صبح
آقا من متوجه نمیشم یعنی چی من خودم فیلد ID رو از نوع string تعریف کردم در ضمن رکورد به خوبی اضافه میشه ولی متاسفانه مکانما روی اولین رکورد قرار میگیری درصورتی که من از دستور select بعد از اون استفاده نکردم یه چیز دیگه میخوام بدونم که چرا بعد از execsql فیلد مورد نظر پیدا نمیشه


ShowMessage(ADOQuery1.FieldValues['fname']);

بطور کل من اینو میخوام که یه رکورد رو که ثبت میکنم توی 3 یا 4 فرم دیگه از همون رکورد استفاده کنم


ADOQuery1.FieldValues['fname']

arshia_
یک شنبه 02 اردیبهشت 1386, 08:31 صبح
تا اونجایی که من می دونم وقتی از execsql استفاده می کنی هیچ مقدار یا رکوردی برگردونده نمی شه و فقط صحت یا سقم کار اعلام می شه
پس در این حالت کوئری شما فاقد مقدار بازگشتی است
پس شما نمی تونی چیزی رو نمایش بدی چون اصلا مقداری برگردونده نشده
به همین دلیل است که تمام فیلدهای شما با اینکه در بانک موجود است ولی قابل دسترسی نیست

maisam57
یک شنبه 02 اردیبهشت 1386, 09:46 صبح
پس باید چکار کنم میتونم از adodataset و adocommand استفاده کنم

SYNDROME
یک شنبه 02 اردیبهشت 1386, 20:56 عصر
با سلام
می تونی بعد از انجام کار (Insert) یک Select ساده بنویسی که مشکلت حل بشود

vcldeveloper
سه شنبه 04 اردیبهشت 1386, 08:39 صبح
بهتره برای همچین عملیات هایی که dataset ایی برنمیگردونند، یک ADOCommand در کنار ADOQuery خودتون قرار بدید و دستور مورد نظر را از طریق ADOCommand به بانک ارسال کنید. در این صورت، با اتمام عملیات ADOCommand، می تونید ADOQuery را Refresh کنید تا تغییرات اعمال شده را نمایش دهد. البته در مورد مثال بالا، فکر کنم که اگر از متد Insert استفاده کنید، براتون راحتتر باشه.