PDA

View Full Version : سوال: استفاده از SQL در دلفی



ehsan_ei
یک شنبه 23 اسفند 1388, 13:42 عصر
سلام دوستان
من تازه کارم و میخوام یه پروژه با دلفی و دیتابیسSQL بنویسم. چنتا مشکل داشتم. لطفا اگه میشه راهنماییم کنین. ابتدا تو فرم اصلیم یه ADOConnectionایجاد کردم وبه SQLوصل شدم.با استفاده از main meno میرم تو یه فرم دیگه. داخل اون یه ADOQueryو یهADOTableویه DataSourceو یه DBGridایجاد کردم.
3تا DBEdite ویهbuttonهم اضافه کردم. به سه تا فیلد از یه جدول موجود در پایگاه دادم به اسم edareh میخوام Insert کنم.روی Button دوبار کلیک کردم و این کد رو نوشتم:

begin

adoQuery1.SQL.clear;
adoQuery1.SQL.add('insert into edareh (sherkatname, shomaretarh, shomaredasturekar) values (:sherkatname, :shomaretarh, :shomaredasturekar)');
adoQuery1.Parameters.ParamByName('sherkatname').Va lue:=trim(dbedit1.Text);
adoQuery1.Parameters.ParamByName('shomaretarh').Va lue:=strtoint(dbedit2.Text);
adoQuery1.Parameters.ParamByName('shomaredastureka r').Value:=strtoint(dbedit3.Text);
adoQuery1.ExecSQL;
برنامه رو که اجرا می کنم و میخوام توی DBEdite داده رو وارد کنم اصلا نمیشه داخلش چیزی رو تایپ کرد.چرا؟:عصبانی++:
و وقتی روی Button کلیک میکنم این ارور رو میده: :گریه:

ADOQuery1: parameter'sherkatname'not found'
لطفا راهنماییم کنین. خیلی ضروریه.
مرسی.

hamid-nic
یک شنبه 23 اسفند 1388, 14:02 عصر
سلام
دوست عزیز برای وارد کردن اطلاعات و ذخیره ی اون باید از edit معمولی برای گرفتن اطلاعات از کاربر استفاده کنید . dbEdit برای نمایش اطلاعات از بانک بکار می ره .

حسین شهریاری
یک شنبه 23 اسفند 1388, 14:03 عصر
سلام

شما اول تكليف خودتونا مشخص كنيد كه ميخاين خودتون كدنويسي كنيد يا از كامپوننتا و ابزارهاي پايگاه داده اي در دلفي استفاه كنيد؟اينطوري كه شما كدنويسي كرديد بايد از Edit معمولي استفاده كنيدومشخص و واضح است تا وقتي كامپوننت Dbedit به هيچ ديتا سورسي متصل نباشه نميشه از اون استفاده و توي اون مقدار وارد كرد.پس اگر قصد استفاده از Dbedit را داريد خواص Datasource و Datafield آنرا تنظيم نماييد و اگه ميخاين دستي كدنويسي كنيد پس از Edit استفاده كنيد.

موفق باشيد

Jozef
یک شنبه 23 اسفند 1388, 14:03 عصر
اول یه پیشنهاد : تمام adoconnection , adotable , adoquery , datasource,... رو در یه datamodule قرار بده نه در فرم اصلی.
دوم اینکه شما با این دستور insert باید از edit معمولی استفاده کنین نه dbedit.
dbedit برای ورود اطلاعات به صورت مستقیم استفاده میشه.
dbedit باید به datasource که به adotable وصل بشه و خاصیت datafield ان رو به فیلد نظیرش در بانک ست کنین.
برای ورود اطلاعات به dbedit باید ابتدا با دستور زیر adotable را به حالت insert ببری :


adotable1.insert;

سپس اطلاعات رو در dbedit وارد کنین و بعد اطلاعات رو post کنین به این صورت :


adotable1.post

یعنی ثبت اطلاعات با dbedit دو مرحله داره.
متوجه نشدی بگو برات یه نمونه ساده بذارم.

ehsan_ei
سه شنبه 25 اسفند 1388, 22:57 عصر
سلام دوست عزیز:
از راهنماییتون ممنون.:قلب: من datasourceش رو تنظیم کردم و معادل datasource1 گذاشتم. ولی وقتی میخوام data fieldش رو تغییر بدم این ارور رومیده:
Adotable1: missing TableName property

در ضمن اگه ممکنه جواب سوال دوم من رو هم بدین.:خجالت:
وقتی روی Button کلیک میکنم این ارور رو میده:


ADOQuery1: parameter'sherkatname'not found'

Jozef
چهارشنبه 26 اسفند 1388, 17:43 عصر
ببین دوست خوبم، شما DataSource ت به AdoTable1وصله ولی خاصیت TableName اون رو ست نکردین. اول AdoTable رو به AdoConnection ت وصل کن. بعد در خاصیت ذکر شده نام جدولت (edareh) رو ست کن و Active رو هم Trueکن.
دوم اینکه پارامتری تعریف نشده که پیدا نمیکنه.

ehsan_ei
پنج شنبه 05 فروردین 1389, 15:09 عصر
من چندتا سوال داشتم در مورد دلفی وSQL که خواهش میکنم هرکی بلده راهنماییم کنه.
1)میخوام تمام مقادیر یکی از فیلدهای جدولم رو توی یک dblookupcombobax داشته باشم. به طوری که مقادیر تکراری رو نشون نده. باید چیکار کنم؟؟؟؟

2) همونطور که میدونین SQL تاریخ شمسی رو قبول نمی کنه. میخوام وقتی کاربر تاریخ شمسی رو وارد کرد قبل اینکه وارد پایگاه داده بشه به میلادی تبدیل بشه و برعکس، وقتی برنامه میخواد تاریخ رو از پایگاه به کاربر نشون بده اول به شمسی تبدیل کنه وبعد نشون بده. چطوری؟؟؟؟؟؟؟؟کامپوننت های
تاریخ شمسی رو ندارم و بلد نیستم باهاش کار کنم!!!!

3) میخوام سه تا جدول رو باهم join کنم و رکوردهایی رو نشون بده که مقدار فیلدsherkatnameشون برابر"پانیا" باشه. این کد رو نوشتم:

with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select edareh.shomaretarh, edareh.sherkatname, name.fname, name.lname, mahdude.khiaban, mahdude.kuche from edareh, name, mahdude where edareh.shomaretarh=name.shomaretarh and edareh.shomaretarh=mahdude.shomaretarh and edareh.sherkatname="پانیا" ');
open;
end;
اما در زمان اجرا این ارور رو میده:

Invalid column name"پانیا".


رو برمیدارم سه تا جدول رو باهم ترکیب میکنه edareh.sherkatname="پانیا"البته وقتی اون شرط آخر یعنی
و درست کار میکنه. چرا؟؟؟؟؟ البته "پانیا"رو داخل سینگل کوتیشن هم می ذارم این ارور رو میده:

Illegal character in input file: 'پ' ($81)
چیکارش کنم؟؟؟؟؟:اشتباه:

pezhvakco
شنبه 07 فروردین 1389, 10:06 صبح
درود :
من چند تا جواب داشتم ، به بین به دردت می خوره :

بهتره برای هر پرسش یه تایپیک میزدی .
بیش تر سوالات با یک جستجوی کوچیک سریعتر جواب میده .

1) شما می تونی از جدولت یه کوری بگیره و اون DBLookupComboBox رو به کوری متصل کنی .

SELECT DISTINCT code
FROM Table

2) تاریخ همیشه مورد توجه بوده :

http://barnamenevis.org/forum/showthread.php?t=148046&highlight=%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE+%D8%B4%D9 %85%D8%B3%DB%8C+%D8%A8%D8%A7%D9%86%DA%A9

http://barnamenevis.org/forum/showthread.php?t=185309&highlight=%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE+%D8%B4%D9 %85%D8%B3%DB%8C+%D8%A8%D8%A7%D9%86%DA%A9

http://barnamenevis.org/forum/showthread.php?t=158899&highlight=%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE+%D8%B4%D9 %85%D8%B3%DB%8C+%D8%A8%D8%A7%D9%86%DA%A9

3)
میخوام سه تا جدول رو باهم join کنم
Join کردن می خوای ولی استفاده نکردی .
برای این کار هم راه حل زیاده : کد ها تو داخل به برنامه کد ساز Sql بنویسی مثل خود Sql Enterprise و یا اینکه شرایط Jion کردن رو مشخص کنی و بعد سوالت رو جستجو کنی .

ehsan_ei
دوشنبه 09 فروردین 1389, 00:25 صبح
سلام دوست عزیز:
بابت راهنماییتون ممنون.:قلب:
من یه مشکلی پیدا کردم. من وقتی برنامه رو run میکنم، اسم یه شرکت رو در قسمت ورود اطلاعات ثبت میکنم و وقتی توی یه tab دیگه میرم(قبل از اینکه از برنامه ی run شده خارج بشم) میخوام که توی combobox اسم اون شرکت رو نشون بده، ولی نشون نمیده!! باید حتما از برنامه خارج شم و دوباره برنامه رو run کنم تا اسم اون شرکت رو نشون بده!!!! به نظرتون چیکار کنم؟؟؟؟؟
سوال دیگه این که من یه متغییر به اسم temp رو از نوع string گذاشتم اما وقتی طول رشته بیشتر از 255 میشه ارور میده. توی کتاب جعفرنژاد گفته باید از راهنمای {$h+} استفاده کنین و اون رو فعال کنین. اما من نمیدونم چه طوری باید این کار رو بکنم؟؟؟!!! اگه یه مثال بزنین ممنون میشم:خجالت:

pezhvakco
دوشنبه 09 فروردین 1389, 10:27 صبح
هر سوال یک تایپیک و در جای مناسب =>

1)
میخوام که توی combobox اسم اون شرکت رو نشون بده،
combobox احتیاج به فراخوانی دوباره اطلاعات جدید است .

2)
متغییر به اسم temp رو از نوع string گذاشت
اصلا مربوط به این بخش نیست .
فکر خوش .