# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi > سوال: sql چیست؟

## _abiriamir

دوستان عزیز
من در حال تهیه برنامه ای هستم که باید از AdoQuery استفاده کنم.
اما میدانید که برای activate کردن آن باید داده ای را در sql آن وارد کنیم اما چه چیزی؟؟؟؟؟؟؟ :متفکر: 


لطفا کمک کنید. شدیدا لازم دارم.

----------


## Ahmad Chehreghani

شما بايد دستورات SQL را توي اون بنويسيد.
به عنوان مثال کد زير تمامي رکوردهاي جدولي که نامش Table1 هست رو مياره.(البته اگر کانکشن رو تنظيم کرده باشيد)

Select * from Table1

توي سايت نمونه هاي زيادي هست فقط کافيه جستجو کنيد!

----------


## _abiriamir

البته یک جایی مشکل دارم
parameter را چکار کنم؟؟؟؟؟؟؟؟؟؟

----------


## Ahmad Chehreghani

منظورتون از پارامتر چيه؟
کد زير رکورد يا رکوردهايي که مقدار فيلد id آنها برابر Edit1.Text هستند رو نشون ميده.
شما کافيه يه جستجو توي سايت بکنيد...

  ADOQuery1.Close;
  ADOQuery1.SQL.Text:='select * from Table1 where id='+Edit1.Text;
  ADOQuery1.Open;

----------


## mehdimdp

استفاده از پارامتر اجباري نيست. 



> منظورتون از پارامتر چيه؟

----------


## engehsan

> منظورتون از پارامتر چيه؟
> کد زير رکورد يا رکوردهايي که مقدار فيلد id آنها برابر Edit1.Text هستند رو نشون ميده.
> شما کافيه يه جستجو توي سايت بکنيد...
> 
>   ADOQuery1.Close;
>   ADOQuery1.SQL.Text:='select * from Table1 where id='+Edit1.Text;
>   ADOQuery1.Open;


 

ADOQuery1.Close;
ADOQuery1.SQL.Add('select * form tabel where id='+Edit1.Text+'');
ADOQuery1.ExecSQL;

بدون پارامتر كه نميشه . يعني ميشه معني نداره

----------


## vcldeveloper

> ADOQuery1.ExecSQL;


قبلا هم گفتم، برای دستوراتی مثل SELECT نباید ExecSQL را فراخوانی کنید، بلکه باید کوئری را Open کنید.

----------


## engehsan

درست ميگي علي آقا . ممنون و شرمنده
به جاي ADoquery بهتره از ADO command استفاده كنيم .

    ADOCommand1.CommandText := 'select * form tabel';
    ADOCommand1.Execute;

نظر شما چي ؟

----------


## Ahmad Chehreghani

> درست ميگي علي آقا . ممنون و شرمنده
> به جاي ADoquery بهتره از ADO command استفاده كنيم .


وقتي از ADO command استفاده ميکنيد مثل اين هست که ADOQuery رو ExecSQL کنيد.
شما بايد همون کدي که بالا نوشتم رو اجرا کنيد

  ADOQuery1.Close;
  ADOQuery1.SQL.Text:='select * from Table1';
  ADOQuery1.Open;

----------


## p_ooya

اگه sql شما قراره رکوردی (هایی) رو برگردونه باید از همین کدی که جناب ahmad_che نوشته اند استفاده کنید (البته من با clear کار می کنم و نه close و راجع به close چیز زیادی نمی دونم). اگر sql شما رکوردی رو بر نمی گردونه (مثل دستور truncate) باید sql رو execute کنید و دیگه نیازی به open نیست.

من یه سوال از اساتید داشتم :
به صورت عملیاتی، تفاوت close و clear و همچنین sql.add و sql.text چیه؟

----------


## vcldeveloper

> به صورت عملیاتی، تفاوت close و clear و همچنین sql.add و sql.text چیه؟


Clear مربوط به خصوصیت SQL موجود در AdoQuery هست. این خصوصیت یک TStringList هست، و متد Clear آن، لیست را خالی می کند. Close یکی از متدهای TAdoQuery هست برای بستن دیتاست.
وقتی شما دستور SQL جدیدی وارد می کنید، می توانید یا آن را به دستورات فعلی موجود در خصوصیا SQL اضافه کنید (با استفاده از Add)، یا دستور جدیدی را جایگزین دستور قبلی کنید. برای جایگیزینی دستور جدید با دستور قدیمی می تونید اول لیست را Clear کنید تا دستور قدیمی حذف شود، و بعد با استفاده از Add، دستور جدید را اضافه کنید.
Text کل محتوای لیست را بصورت string در اختیار شما قرار میده، به این ترتیب، شما با خصوصیت SQL مثل یک خصوصیت string رفتار می کنید. در این حالت، هر چیزی که به Text نسبت بدید، موجب حذف مقادیر موجود در لیست و جایگزین شدن مقادیر جدید میشه، پس نیازی به Clear هم پیدا نمی کنید. البته باید Close را قبلش فراخوانی کنید، چون تغییر خصوصیت SQL در دیتاستی که هنوز باز هست مجاز نیست.

----------

