ورود

نسخه کامل مشاهده نسخه کامل : دلفی و SQL



clematis_h
24-03-2010, 01:08
سلام دوستان:
من چندتا سوال داشتم در مورد دلفی وSQL که خواهش میکنم هرکی بلده راهنماییم کنه.
1)میخوام تمام مقادیر یکی از فیلدهای جدولم رو توی یک combobax داشته باشم. یه DBCombobox و یه datasource داخل فرم3 گذاشتم و خاصیت dataset از datasource رو برابر form2.adotable1 گذاشتم که همون جدول مورد نظره. اما درست کار نمیکنه. باید چیکار کنم؟؟؟؟:41:

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

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="پانیا"البته وقتی اون شرط آخر یعنی
و درست کار میکنه. چرا؟؟؟؟؟:41:
از اساتید محترم لطفا هرکی بلده راهنماییم کنه. خیلی حیاتیه:40:
مرسی:10:

C0OPeR
24-03-2010, 11:09
سلام :20:

1)میخوام تمام مقادیر یکی از فیلدهای جدولم رو توی یک combobax داشته باشم. یه DBCombobox و یه datasource داخل فرم3 گذاشتم و خاصیت dataset از datasource رو برابر form2.adotable1 گذاشتم که همون جدول مورد نظره. اما درست کار نمیکنه. باید چیکار کنم؟؟؟؟

پیشنهاد میکنم از dblookupcombobox استفاده کنید . کارتون رو راحت میکنه .

در غیر اینصورت از کد زیر استفاده کنید .

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



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


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

clematis_h
25-03-2010, 13:46
سلام دوست عزیز:
ممنون از راهنماییتون.:11:
از dblookupcombobox استفاده کردم، ولی میخوام فیلدهای تکراری رو نشون نده باید چیکار کنم؟؟؟؟:41:
لطفا برای استفاده از کامپوننت تاریخ شمسی بیشتر راهنمایی کنین. تا حالا باهاش کار نکردم!!
"پانیا"رو داخل سینگل کوتیشن هم می ذارم این ارور رو میده:

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

C0OPeR
25-03-2010, 21:00
خواهش میکنم :46:

ببین دوست من . معمولا وقتی از DbComboBox یا LookUp استفاده میکنن که فیلد تکراری نداشته باشیم
به هر حال شما میتونید با یک کوئری مقادیر تکراری رو جدا کنید و بعد وارد ComboBox کنید .
به عنوان مثال :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

مرحله اول فیلد غیر تکراری رو جدا میکنه مرحله بعد میریزه تو combobox

===========
چندتا کامپوننت تاریخ شمسی داریم و بسته به نیاز خودتون میتونید از اونها استفاده کنید .
اگه یه چیز کامل میخواین من solar رو بهتون پیشنهاد میکنم . یکم جستجو کنید تو انجمن پیدا میشه .
===========
منظورم از سینگل کوتیشن این بود که مقدار رشته ای در کوئری داخل سینگل کوتیشن قرار میگیره .
مثلا

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا شما باید اینو توی دلفی طوری بنویسن که وقتی ارسال میشه به همین صورت بالا باشه .
میتونید از QuotedStr استفاده کنید و مقدار رو داخل یک متغیر رشته ای بریزین .
مثلا :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

clematis_h
26-03-2010, 12:24
بازم ممنون:11:
من روی dblookupcombobox دابل کلیک کردم و این کدی که شما گفتین رو نوشتم اما برای Items این ارور رو میده:

Undeclared identifier: 'Items'
چرا؟؟؟ باید به جای items چیز دیگه ای بنویسم؟؟؟؟
سوال دیگه این که من temp رو(تو اون کدی که گفتین) از نوع string گذاشتم اما وقتی طول رشته بیشتر از 255 میشه ارور میده. توی کتاب جعفرنژاد گفته باید از راهنمای {$h+} استفاده کنین و اون رو فعال کنین. اما من نمیدونم چه طوری باید این کار رو بکنم؟؟؟!!!:41:

C0OPeR
26-03-2010, 20:10
یه نمونه کد در رابطه با استفاده از {$h+}

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

شما میتونی temp رو از نوع WideString هم تعریف کنی .
یا اینکه رشته رو بریزی توی متغیرهای دیگه و در نهایت اونا رو بهم بچسبونی :31:

dblookupcombobox خاصیت Items رو نداره .
یک راه اینه که یه combobox معمولی بذارین و از همون کد استفاده کنید .
راه دوم اینه که شما قسمت اول کد یعنی :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رو بنویسی و وقتی این کد اجرا و رکوردهای غیر نکراری جدا شد datasource اون dblookupcombobox رو برابر datasource ای که به adoquery1 وصله بکنین .

clematis_h
27-03-2010, 20:42
سلام:
اون آدرسی که دادین رو دیدم. طبق اون کد نمونه عمل کردم اما بازم ارور داد. توی اینترنت سرچ هم کردم اما چیزی پیدا نکردم.
برای الحاق رشته، از selest تا اول where رو ریختم توی temp و بقیه رو ریختم توtemp1. حالا اون جایی که برایtemp این کد رو نوشتم:

temp:=temp+QuotedStr(sherkatname);
برای temp1 هم باید بنویسم؟ وبعد در تابعadd دورشته رو جمع کنم؟ add(temp+temp1)

یه combobox معمولی هم گذاشتم و توش همون کد رو نوشتم اما جواب نداد!!!! هیچ کدوم از خاصیتاشو نباید تغییر داد؟
یه سوال دیگه این که به جای گذارش گیری با Qreport میشه یه سرچ معمولی با دستوراتSQL و کوئری نوشتن انجام داد؟
ممنون میشم اگه بازم جوابم رو بدین! :11:

clematis_h
27-03-2010, 23:48
مشکل combobox رو حل کردم. اما باز یه مشکلی پیدا کردم.:41: من وقتی برنامه رو run میکنم، اسم یه شرکت رو در قسمت ورود اطلاعات ثبت میکنم و وقتی توی یه tab دیگه میرم(قبل از اینکه از برنامه ی run شده خارج بشم) میخوام که توی combobox اسم اون شرکت رو نشون بده، ولی نشون نمیده!! باید حتما از برنامه خارج شم و دوباره برنامه رو run کنم تا اسم اون شرکت رو نشون بده!!!! به نظرتون چیکار کنم؟؟؟؟؟

clematis_h
29-03-2010, 17:39
کسی نیست جواب ما رو بده. خواهشا جواب بدین. خیلی عجله دارم:41:

C0OPeR
31-03-2010, 13:57
مشکل combobox رو حل کردم. اما باز یه مشکلی پیدا کردم.:41: من وقتی برنامه رو run میکنم، اسم یه شرکت رو در قسمت ورود اطلاعات ثبت میکنم و وقتی توی یه tab دیگه میرم(قبل از اینکه از برنامه ی run شده خارج بشم) میخوام که توی combobox اسم اون شرکت رو نشون بده، ولی نشون نمیده!! باید حتما از برنامه خارج شم و دوباره برنامه رو run کنم تا اسم اون شرکت رو نشون بده!!!! به نظرتون چیکار کنم؟؟؟؟؟

یه بار باید اطلاعات بازخوانی شه .
مثلا :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توی رویداد نمایش فرم میتونی این رو بذاری تا هر بار فرم نمایش داده میشه اطلاعات باز خوانی شه یا هر جایی که دوست داری .

clematis_h
01-04-2010, 00:15
ولی من اصلا از adotable استفاده نکردم. فقط از adoquery استفاده کردم. توی این کدی که شما گذاشتین به جای adotable، ادوکوئری گذاشتم اما جواب نداد. میشه بیشتر راهنمایی کنین؟

سوال دیگه این که من مشکل رشته هام هنوز حل نشده، میشه لطفا بیشتر توضیح بدین و یه مثال بزنین.خیلی مهمه. چون فیلدای جدولم زیادن برای نشمن دادن همشون تو جدول با مشکل مواجه شدم.:41: ممنون میشم:11:

clematis_h
01-04-2010, 00:49
کسی نیست جواب بده؟؟؟؟؟؟

a-soft
30-06-2010, 15:46
سلام.
من یک برنامه با دلفی دارم و می خواهم در فرم اول آن user و pass را از کاربر بگیرم اگر درست بود کاربر وارد بشه .
برای همین هم در sql یک table با نام های user و pass ایجاد کردم و مقدار 1 را درون هر دو فیلد ریختم .
بعد در دلفی روی باتن این کد را نوشتم :
if edit1.text= adotable1.fieldbyvalue('user') and edit2.text=adotable1.fieldbyvalue('pass') then
form2.show
خطا نمی گیره ولی اجرا هم نمیشه یعنی فرم 2 را نشون نمیده.
تشکر.

مرد مباح
30-06-2010, 20:33
هر شرط رو توی یک پرانتز بزار.
قاعدتا نباید مشکل داشته باشه.

a-soft
30-06-2010, 23:32
سلام.
شرط ها را در پرانتز گذاشتم ولی اجرا نمیشه.یعنی error نمی گیره ولی اجرا هم نمیشه مثل اینکه دستور false، if میشه و دستور درون آن اجرا نمیشه.!!!!
اگر بخواهم این برنامه را با stored proc بنویسم چطوریه؟
تشکر.

مرد مباح
01-07-2010, 16:32
من نمیدونم با StoreProc چطوری باید این کارو بکنی؟
ولی از تابع trim برای همه 4تا بخشت استفاده کن. احتمالا مشکلت حل میشه.