PDA

View Full Version : سوال: توضیح در مورد نحوه عمل کردن یک کد



amir_ir
سه شنبه 31 شهریور 1388, 18: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, 13:17 عصر
اگر دوستان لطف کنن این مسئله رو توضیح بدن فکر کنم واسه خیلی ها آموزنده باشه

DlphIran
چهارشنبه 01 مهر 1388, 13: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, 11:52 صبح
کسی میتونه کمکی کنه و لطف کنه توضیح بده.
ممنون

Ahmad Chehreghani
پنج شنبه 02 مهر 1388, 12: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, 17: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, 17:15 عصر
سلام دوست عزیز

هروقت می خوای یک رشته در پایگاه داده جستجو کنی باید آن رشته رو داخل ' ' قرار بدی.
ولی وقتی این کارو می کنی چون خود دلفی نیز دستوری به همین شکل دارد نمی تونی کد بنویسی واسه همینم من از روش زیر استفاده می کنم:

فرض کنیم رشته ای که می خواهیم جستجو کنیم باید کاربر در Edit1.text وارد کند
پس باید در کوئری این کد نوشت:

sql.add('select * from mytablename where name = '+#39+Edit1.text+#39+' ;')d