PDA

View Full Version : سوال: اشكال كد اين adoquery چيه؟؟؟



manzare
پنج شنبه 10 مرداد 1387, 14:27 عصر
سلام من ميخوام با وارد كردن يك عدد با استفاده از adoqueryاز يك جدول مقادير چند فيلد از نوع را در فرم نشان دهم
text
اين كد را نوشتم اما در قسمت (where (s اجازه ي تبديل نوع را نميده
strtoint(edit .text ) را قبول نميكنه از متغير هم نميشه استفاده كرد
چكار كنم؟

ADOQuery2.Close;
ADOQuery2.SQL.Clear
? = ADOQuery2.SQL.Add('select * from atable where qcode .');
ADOQuery2.Open;
ADOQuery2.SQL.Text;
Edit2.Text:=ADOQuery2.Fields.Fields[1].AsString;
Edit3.Text:=ADOQuery2.Fields.Fields[2].AsString;
من به جاي ؟ متغير هم گذاشتم اما مشكلش اين بود كه نمي تونست نوعtext را به int تبديل كنه
يعني كد temp := strtoint (edit.text) را قبول نميكرد
من ميخوام به جاي ؟ يه جوري مقدار فيلدي كه در يك dbgridروش كليك كرديم قرار بگيره

اين كد را هم اول نوشتم اما چون نوع فيلد ها text است خطا ميگيره


ADOQuery1.Parameters.Items[0].Value:=StrToInt (Edit3.Text );


ADOQuery1.Open;
ADOQuery1.SQL.Text;
ADOQuery1.ExecSQL;
Edit1.Text:=ADOQuery1.Parameters.Items[1].Value;
Edit2.Text:=ADOQuery1.Parameters.Items[2].Value;
:گریه::گریه:

moonplant
پنج شنبه 10 مرداد 1387, 14:48 عصر
متاسفانه من متوجه دلیل استفاده شما از ADOQuery2.SQL.Text نشدم. در کد اولی که نوشته اید هم این را اضافه نکرده بودید که متغیر s چه چیزی است.

اما به هر حال، می توانید اینطوری بنویسید:


With َAdoQuery2 do
begin
Close;
SQL.Text := 'select * from atable where qcode =' + s;
Open;
end;
با این فرض که s از نوع string است. اگر s از نوع integer است، بنویسید:


SQL.Text := 'select * from atable where qcode =' + inttostr(s);

Hamid_PaK
پنج شنبه 10 مرداد 1387, 16:17 عصر
توی دلفی برای جایگزینی متغیرهای پارامتر SQL باید به این روش عمل کنید:


ADOQuery2.SQL.Text := 'select * from atable where (qcode = :acode)';
ADOQuery2.Parameters.ParamByName('acode').Value := Edit3.Text;
ADOQuery2.Open;
...


یا حق ...

manzare
پنج شنبه 10 مرداد 1387, 18:05 عصر
سئوالم رو ويرايش كردم
لطفا راهنماييم كنيد

SYNDROME
پنج شنبه 10 مرداد 1387, 18:25 عصر
اگر متغییر S از نوع عددی است :


ADO.SQL.Text := 'Select * From Tbl_Test Where Code='+Inttostr(s);

حالا متغیر s از نوع رشته باشد و فیلد Code هم از نوع رشته باشد:


ADO.SQL.Text := 'Select * From Tbl_Test Where Code='+QuotedStr(s);

موفق باشید

Hamid_PaK
پنج شنبه 10 مرداد 1387, 18:43 عصر
سوال خیلی مبهم هست!!
آیا فیلد شما از نوع عددی است و شما با جستجو آن مشکل دارید؟
یا با مقدار دهی پارامتر در یک دستور SQL مشکل دارید؟

یا حق ...

manzare
جمعه 11 مرداد 1387, 10:02 صبح
در كل من در فرمم يك dbgrid دارم كه به يك ado tableمربوطه ميخواستم با كليك كاربر روي هر سطر اين گريد (يك فيلد عددي از اين گريد (در سطر انتخاب شده)به يكado queryفرستاده بشه تا در اين كوئري با استفاده از اين مقدار ورودي چند تا فيلد text در چند edit نمايان بشه
مشكلاتم:
1 نميدونم چطوري به اون فيلد دسترسي داشته باشم؟

2 اگه اون فيلدعددي را از گريد بخونم نوعش عددي باقي ميمونه؟اگه نه چطور در adoquryميتونم فيلدtextپاس داده شده بهش را به INT تبديل كنم
فيلد از نوع عددي است و بايد به صورت عددي به كوئري پاس داده شود
واقعا ببخشيد كه درگيرتون كردم

SYNDROME
جمعه 11 مرداد 1387, 11:16 صبح
از ADO1 که به DBGrid وصل است مقدار فیلد عددی را بگیرید و آن را به ADO2 بفرستید.


ADO.SQL.Text := 'Select * From Tbl2 Where Code='+aDO.FieldByName('ID').asstring;
ADO.Open;

ID فیلد عددی از Grid شماست و COde فیلد شما در جدول دوم است.
موفق باشید

HamedNET
جمعه 11 مرداد 1387, 11:36 صبح
پارمتر ها خوب تعریف نشده

Hamid_PaK
جمعه 11 مرداد 1387, 12:28 عصر
روش درست فراخوانی اطلاعات از DBGrid رو دوست خوبم علی توضیح داد.
ببینید برای فراخوانی اطلاعات یک فیلد و استفاده از آن بهترین روش استفاده از AsVariant هست که نوع متغییر را نیز به همراه خواهد داشت :


ADOQuery1.SQL.Text := 'select * from atable where (qcode = :qcodeparam)';
ADOQuery1.Parameters.ParamByName('qcodeparam').Val ue := ADOQuery0.Fields[ 1 ].AsVariant
ADOQuery1.Open;

ADOQuery2.SQL.Text := 'select * from atable2 where (qcode = :qcodeparam2)';
ADOQuery2.Parameters.ParamByName('qcodeparam2').Va lue := ADOQuery1.Fields[ 0 ].AsVariant;
ADOQuery2.Open;

کوئری شماره 0 الان اطلاعات را در گرید نمایش داده است که به وسیله مقدار فیلد شماره 1 آن شما کوئری شماره 1 را می سازید و به وسیله مقدار فیلد شماره 0 کوئری 1 کوئری شماره 2 را می سازید، سعی کردم ساده بنویسم، روشهای پیچیده هم وجود داره که ساده ترند.

یا حق ...