View Full Version : سوال: توضیح در مورد نحوه عمل کردن یک کد
  
amir_ir
سه شنبه 31 شهریور 1388, 19:54 عصر
سلام به همه دوستان 
دو فیلد Pelak و Km در SQL 2005 به صورت Nvarchar تعریف شدند. اگر کد زیر رو به صورت ( '+Edit3.Text+ ' , ' +edit4.text+ ' ) بنویسیم فقط اعداد رو میشه در دیتایس وارد کرد و کد کار میکنه ، ولی اگر داده وارد شده String باشه مثلا کارکتر g وارد بشه .، خطای زیر رو میده ولی اگر به صورت ( ' ' ' +Edit3.Text+ ' ' ' , ' ' ' +Edit4.Text+ ' ' ' ) نوشته بشه کار میکنه. علت چیه؟
The name "g" is not permitted in this context. valid expressions are constants, constant expressions, and( in some contexts) variables.,Column names are not permitted' 
 
With DM2.ADOQtest  do
begin                                        
    SQL.Clear;
   { SQL.Text:='Insert  into car (Km,Pelak)    values ( ' +Edit3.Text+  '  ,  ' +edit4.text+ ' ) ' ;   }                 // Not OK with this line
    SQL.Text:='Insert  into car (Km,Pelak)    values ( ' ' ' +Edit3.Text+ ' ' '  ,  ' ' '+Edit4.Text+ ' ' ')' ;                // OK with this line
    ShowMessage(SQL.text);
    ExecSQL;
end;
با تشکر
amir_ir
چهارشنبه 01 مهر 1388, 14:17 عصر
اگر دوستان لطف کنن این مسئله رو توضیح بدن فکر کنم واسه خیلی ها آموزنده باشه
DlphIran
چهارشنبه 01 مهر 1388, 14:52 عصر
من از اين روش براي مقدار دادن به فيلدها استفاده نمي كنم و تا حالا مشكلي هم نداشتم ،نمونه اش رو مي زارم واسه ات
sql.add('insert into car(km,pelak)')
sql.add('values(:a,:b)')
parameters.parambyname('a').values:=edit3.text
parameters.parambyname('b').values:=edit4.text
l و ادامه ......
amir_ir
پنج شنبه 02 مهر 1388, 12:52 عصر
کسی میتونه کمکی کنه و لطف کنه توضیح بده. 
ممنون
Ahmad Chehreghani
پنج شنبه 02 مهر 1388, 13:42 عصر
وقتي شما دستور زير را در کد SQL مينويسيد 1 و 2 به عنوان عدد فرستاده ميشن و چون فيلد شما از نوع  Nvarchar هستش قبل از ذخيره شدن به رشته تبديل ميشن. حالا اگر به جاي 1 يا 2 ما G رو قرار بديم، سيستم به مقدار ما نگاه ميکنه(G) و G  عدد نيست و پيغام ميده.
کد 1:
Insert  into car (Km,Pelak)    values ( 1  ,  2)
خوب شما وقتي مي خواهيد يک String رو در فيلد Nvarchar  بريزيد بايد اول و آخر مقدارتون ' رو قرار بديد
يعني کد زير را بنويسيد
کد 2:
Insert  into car (Km,Pelak)    values ( '1'  ,  '2')
خوب حالا اين دستورات را چطور در دلفي پياده سازي کنيم؟
براي فرستادن عدد از کد زير استفاده ميکنيم(يعني فيلد شما مثلا Int باشد)
  SQL.Text:='Insert  into car (Km,Pelak)    values ( ' +Edit1.Text+ '  ,   '+Edit2.Text+ ')' ;
که کد SQL ما به صورت کد شماره 1 درمياد.
براي اينکه به يک متغير Nvarchar مقدار بديم بايد کد خروجي SQL رو به کد شماره 2 تبديل کنيم يعني يک ' به اول و آخر مقدار هامون اضافه کنيم که 2 راه براش داريم اول اين راهي است که خود شما هم استفاده کرديد
SQL.Text:='Insert  into car (Km,Pelak)    values ( ' ' ' +Edit3.Text+ ' ' '  ,  ' ' '+Edit4.Text+ ' ' ')' ; 
و راه ديگه اينه که رشته را در QuotedStr قرار بديد:
SQL.Text:='Insert  into car (Km,Pelak) values ( '+QuotedStr(Edit1.Text)+'  , '+QuotedStr(Edit2.Text)+ ')' ;
موفق باشيد
amir_ir
پنج شنبه 02 مهر 1388, 18:04 عصر
وقتي شما دستور زير را در کد SQL مينويسيد 1 و 2 به عنوان عدد فرستاده ميشن و چون فيلد شما از نوع Nvarchar هستش قبل از ذخيره شدن به رشته تبديل ميشن. حالا اگر به جاي 1 يا 2 ما G رو قرار بديم، سيستم به مقدار ما نگاه ميکنه(G) و G عدد نيست و پيغام ميده.
کد 1:
Insert  into car (Km,Pelak)    values ( 1  ,  2)
خوب شما وقتي مي خواهيد يک String رو در فيلد Nvarchar بريزيد بايد اول و آخر مقدارتون ' رو قرار بديد
يعني کد زير را بنويسيد
کد 2:
Insert  into car (Km,Pelak)    values ( '1'  ,  '2')
خوب حالا اين دستورات را چطور در دلفي پياده سازي کنيم؟
براي فرستادن عدد از کد زير استفاده ميکنيم(يعني فيلد شما مثلا Int باشد)
  SQL.Text:='Insert  into car (Km,Pelak)    values ( ' +Edit1.Text+ '  ,   '+Edit2.Text+ ')' ;
که کد SQL ما به صورت کد شماره 1 درمياد.
براي اينکه به يک متغير Nvarchar مقدار بديم بايد کد خروجي SQL رو به کد شماره 2 تبديل کنيم يعني يک ' به اول و آخر مقدار هامون اضافه کنيم که 2 راه براش داريم اول اين راهي است که خود شما هم استفاده کرديد
SQL.Text:='Insert  into car (Km,Pelak)    values ( ' ' ' +Edit3.Text+ ' ' '  ,  ' ' '+Edit4.Text+ ' ' ')' ; 
و راه ديگه اينه که رشته را در QuotedStr قرار بديد:
SQL.Text:='Insert  into car (Km,Pelak) values ( '+QuotedStr(Edit1.Text)+'  , '+QuotedStr(Edit2.Text)+ ')' ;
 
موفق باشيد
 
سلام . واقعا از توضیحتون متشکرم. توضیحتون کاملا گویا بود . پیروز و موفق باشید :چشمک:
nilidelphi
پنج شنبه 02 مهر 1388, 18:15 عصر
سلام دوست عزیز
 
هروقت می خوای یک رشته در پایگاه داده جستجو کنی باید آن رشته رو داخل ' ' قرار بدی.
ولی وقتی این کارو می کنی چون خود دلفی نیز دستوری به همین شکل دارد نمی تونی کد بنویسی واسه همینم من از روش زیر استفاده می کنم:
 
فرض کنیم رشته ای که می خواهیم جستجو کنیم باید کاربر در Edit1.text وارد کند
پس باید در کوئری این کد نوشت:
sql.add('select * from mytablename where name = '+#39+Edit1.text+#39+' ;')d
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.