PDA

View Full Version : Autonumber در دلفی



Batman
یک شنبه 27 خرداد 1386, 08:26 صبح
من یه بانک توی access طراحی کردم که یه فیلد ازنوع autonumber داره
توی دلفی چجوری میتونم این فیلد رو بیارم
اگه توی insert همراه با فیلدهای دیگم که میخوام درجشون کنم تعریفش نکنم خطا میگیره و اگه هم تعریفش کنم که دیگه autonumber نمیشه میخوام هر رکوردی رو که اضافه یا حذف کردم خودش شماره ها رو مرتب کنه

mehdi_mohamadi
یک شنبه 27 خرداد 1386, 08:28 صبح
ظاهرا نباید error بده.
اگه ممکنه error را تایپ کنید

hr110
یک شنبه 27 خرداد 1386, 08:42 صبح
مشکل از دستور Insert است:


insert into TABLE(fld1,fld2,fld3) value(vl1,val2,val3)


بدیهی است که فیلد AutoNumber نباید در لیست فیلدها قرار بگیره.

mehdi_mohamadi
یک شنبه 27 خرداد 1386, 08:43 صبح
error را بنویسید

ealvandi
یک شنبه 27 خرداد 1386, 10:59 صبح
insert into TABLE(fld1,fld2,fld3) value(vl1,val2,val3)

بدیهی است که فیلد AutoNumber نباید در لیست فیلدها قرار بگیره.


اگه فرض کنیم که fld1 همون فیلد autonumber شما باشه نباید vl1 رو خود شما بهش مقدار بدی چون خود دیتابیس به صورت هوشمند با autonumber برخورد میکنه. و همه کاراش به عهده خودشه.


موفق باشی.

Batman
یک شنبه 27 خرداد 1386, 12:34 عصر
من این دستورات رو نوشتم بازم error میده
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into 456 values(:sum)');
ADOQuery1.Parameters.ParamByName('sum').Value:=Edi t1.Text;
ADOQuery1.ExecSQL;
این هم خطا
number of query values and destination fields are not the same

Saeid59_m
یک شنبه 27 خرداد 1386, 13:10 عصر
هیچ مشکلی نداره
چرا اینطوری خوب توی خود AdoTable‌ این کار رو بکن
اونجا هم Insert داره
من همین الان یه پروژه دستمه که با اکسس دارم کار می کنم همین موضوع هم توی پروژه گنجوندم و مشکلی هم نداشتم .

ghabil
یک شنبه 27 خرداد 1386, 13:16 عصر
خطایی که میده درسته، در دستور Insert زمانی میتونید اسم فیلدها رو نزارید که میخواهید همه فیلدهارو مقدار دهی کنید ، اینطوری درست میشه :



ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into 456(SumField) values(:sum)');
ADOQuery1.Parameters.ParamByName('sum').Value:=Edi t1.Text;
ADOQuery1.ExecSQL


اون SumField یعنی اسم فیلدی که مقدار Sum رو میخوای بزاری توش...



پ.ن : اسم جدولت رو گذاشتی 456؟!!!!!!!

Batman
دوشنبه 28 خرداد 1386, 07:06 صبح
آقای ghabil من به جای تمام sum ها از S استفاده کردم اما بازم خطا میده
data type mismatch in criteria expression

ghabil
دوشنبه 28 خرداد 1386, 20:07 عصر
اصلا خوندی من چی نوشتم برات ؟!

Batman
سه شنبه 29 خرداد 1386, 07:39 صبح
اگه اشکالی نداره یه کمی بیشتر توضیح بدید من که متوجه نشدم
هر کاری کردم نشد که نشد
ممنون

Saeid59_m
سه شنبه 29 خرداد 1386, 07:55 صبح
من منظورتون رو برای استفاده از دستور insert متوجه نشدم

ولی فرض کنیم یه رکورد به بانک می خواهیم اضافه کنیم . فیلد Id از نوع AutoNumber



Table1.Open;
Table1.Append;
Table1Name.value:='ali';
Table1Family:='Rezaee';
Table1.Post;
Table1.Close;


این برای اضافه کردن یه رکورد اصلا نیاز نیست اسم فیلد ID‌ رو بیاری (به همین سادگی)

البته اگه منظورت استفاده از دستور Insert هست . دلیلش رو بگو تا اگه تونستم جواب بدم .

ghabil
سه شنبه 29 خرداد 1386, 13:05 عصر
فرض کن یک جدول داری 2 تا فیلد داره به نامهای Field1 و Field2(اصلا به فیلد AutoNumebr هم کاری نداشته باش) اگر بخوای هر دوتا فیلد رو مقدار دهی کنی باید دستور Insert رو اینطوری بنویسی :



insert MyTable(Field1, Field2) values(1, 'Ali');


اما چون داری همه فیلدها رو مقدار دهی میکنی میتونی اون پرانتزی که پر رنگش کردم رو ننویسی ! ولی به شرطی که همه فیلدها رو بخوای مقدار دهی کنی.
اما حالا که تو نمیخوای فیلد اول رو به خاطر AutoNumber بودن مقدار دهی کنی پس لازمه بگه مقادیر Values متعلق به کدوم فیلدها هستند و اسمشون رو بگی.

Batman
چهارشنبه 30 خرداد 1386, 07:35 صبح
آقای قبیل دمت گرم مشکلم حل شد
ممنونم