انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: برنامه نویسی با Lazarus (پست اول ویرایش شد ۹۳/۰۴/۲۳ )  (دفعات بازدید: 203881 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین علی هردان

  • Full Member
  • *
  • ارسال: 243
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #75 : 12 آذر 1391، 01:55 ب‌ظ »
راحت ترین کار اینه که قبل از اینکه query رو اجرا کنی متن sql اونو نشون بدی بعد ببین درست ایجاد شده یا نه.
یعنی خط ZQuery2.ExecSQL; رو غیر فعال کن و بجاش بنویس showmessage(ZQuery2.sql.text); و وقتی متن sql رو نشون داد باید یه چیزی شبیه به اونی که تو workbench برای درج جدول زدی ساخته باشه. اگه جایی , یا ; یا پانتز کم و زیاد بود اصلاحش کن و دوباره امتحان کن .
 ;)
موضوع اصلا این نیست. اروری که میزنه توی کامپایل کردن هست. اصلا به مرحله ای نمیرسه که بخوای از ShowMessage استفاده کنی! مشکلش اینه که اون پرانتزا یکم قاطی شدن. تابع قبل از اینکه کامل تموم بشه اشتباهی بسته شده و در آخر دوباره بسته شده.
من فکر کنم درستش کردم:
ZQuery1.sql.Add('call `amahi`.`insert_p`(8520010,'+QuotedStr('samad')+','+QuotedStr('jalali')+');');

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #76 : 12 آذر 1391، 03:19 ب‌ظ »
راحت ترین کار اینه که قبل از اینکه query رو اجرا کنی متن sql اونو نشون بدی بعد ببین درست ایجاد شده یا نه.
یعنی خط ZQuery2.ExecSQL; رو غیر فعال کن و بجاش بنویس showmessage(ZQuery2.sql.text); و وقتی متن sql رو نشون داد باید یه چیزی شبیه به اونی که تو workbench برای درج جدول زدی ساخته باشه. اگه جایی , یا ; یا پانتز کم و زیاد بود اصلاحش کن و دوباره امتحان کن .
 ;)
موضوع اصلا این نیست. اروری که میزنه توی کامپایل کردن هست. اصلا به مرحله ای نمیرسه که بخوای از ShowMessage استفاده کنی! مشکلش اینه که اون پرانتزا یکم قاطی شدن. تابع قبل از اینکه کامل تموم بشه اشتباهی بسته شده و در آخر دوباره بسته شده.
من فکر کنم درستش کردم:
ZQuery1.sql.Add('call `amahi`.`insert_p`(8520010,'+QuotedStr('samad')+','+QuotedStr('jalali')+');');

افرین   :)
حواب داد.
ظاهرا با سن کمت کارهای خوبی انجام میدی.  ;)  :D
فک کنم لازم بشه از اول بشینم برنامه نویسی رو مرور کنم.

@ Delphi887

showmessage(ZQuery2.sql.text);
دستور جالبی بود.

پس در این صورت برای دریافت ورودی نام از فرم به این صورت باید اجرا کنیم:
ZQuery2.sql.Add('call `amahi`.`insert_p`(908520010,'+QuotedStr(Edit1.Text)+','+QuotedStr('jalali')+');');
محتوای Edit1.Text رو میگیره و میفرسته به SP ما و خروجی رو بر ثبت میکنه.

و ما میطوانیم

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #77 : 13 آذر 1391، 07:31 ق‌ظ »
سلام
پس در این صورت برای دریافت ورودی نام از فرم به این صورت باید اجرا کنیم:
ZQuery2.sql.Add('call `amahi`.`insert_p`(908520010,'+QuotedStr(Edit1.Text)+','+QuotedStr('jalali')+');');
محتوای Edit1.Text رو میگیره و میفرسته به SP ما و خروجی رو بر ثبت میکنه.
آفرین  ;)
این یک راه استفاده از stored procedure ها هست. یعنی شما متن رو ایجاد کنی و به جای پارامتر های ورودی مقدار متغیرهایی که کاربر وارد کرده رو بزارید.
این راه خیلی راحت و مفیده ولی همیشه نمیشه اینجوری به procedure ها پارامتر ها رو ارسال کرد و بعضی وقتا کار خیلی سخت میشه.(مثلا برای درج تصویر در جدول)
روش دوم که قبلا هم گفتم استفاده از param توی query هستش.
شما همون متن رو که لازم دارید توی خاصیت sql مینویسی ولی قبل از هر متقیر یک : میزاری. اینجوری مشخص می کنی که عبارت بعدی یک متغیر است که باید مقدار دهی بشه.
call `amahi`.`insert_p` (:id,:name,:family');
بعد اگه قسمت param رو نگاه کنی ۳ تا متقیر توش اومده که دقیقا همون نامهای نوشته شده تو query با : است.
تو این مرحله باید نوع پارامتر از نظر ورودی یا خروجی رو تعریف کنی و بعد نوع پارامتر از نظر نوع عددی یا رشته ای یا ...
بعد که همه پارامتر های ورودی رو تنظیم کردی تو کد اینجوری بهشون مقدار میدی :
ZQuery2.ParamByName('id').AsInteger:=strtoint(Edit1.Text);
ZQuery2.ParamByName('name').AsString:=Edit2.Text;
ZQuery2.ParamByName('family').AsString:=Edit3.Text;
ZQuery2.ExecSQL;
یا حق  :)

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #78 : 13 آذر 1391، 12:45 ب‌ظ »




سلام دوستان

بسیار عالی و مفید   ;)  8)

با کمک این هم امتحان میکنم تا نتیجه رو ببینم.

چند سوال برام پیش اومده:

1- من کمی گشتم ولی  نتونستم Data Module رو پیدا کنم؟می خواستم یکی بسازم

2- type فیلد عکس (برای ذخیره سازی عکس) در پایگاه داده باید از چه نوعی باشه ؟ (رشته یا ...)

3- حالا برای ذخیره سازی عکس به کمک پارام به همین صورت باید عمل کنیم؟

4-یک سوال قدیمی:
تفاوت Quotedstr با اون روشی که شما گفتین (استفاده از 4 کوتیشن '''' ) در چیه؟


تشکر  :)
و ما میطوانیم

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #79 : 13 آذر 1391، 01:16 ب‌ظ »
1- من کمی گشتم ولی  نتونستم Data Module رو پیدا کنم؟می خواستم یکی بسازم
باید گزینه file  و بعد New ... رو بزنید و از پنجره باز شده قسمت Module میتونید Data Module رو پیدا کنید
2- type فیلد عکس (برای ذخیره سازی عکس) در پایگاه داده باید از چه نوعی باشه ؟ (رشته یا ...)
برای تصویر باید نوع اون رو در حالت Blob قرار بدید
3- حالا برای ذخیره سازی عکس به کمک پارام به همین صورت باید عمل کنیم؟
تقریبا بله ولی برای اینکه تصویر را از طریق پارامترها ارسال کنید یکم تغییرات باید تو کدها معمول بدید
4-یک سوال قدیمی:
تفاوت Quotedstr با اون روشی که شما گفتین (استفاده از 4 کوتیشن '''' ) در چیه؟
راستش نمیدونم ولی استفاده از تابع یا حالتی که من استفاده می کردم در نتیجه تفاوتی نداره . :)

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #80 : 13 آذر 1391، 05:34 ب‌ظ »

سلام   :)
این قضیه ذهنم رو مشغول کرده.
برای کار با عکس ها (بخصوص برای پایگاه داده) از کدوم ابزار باید استفاده بشه؟ عکس رو لود کنیم و دسترسی داشته باشیم.

تشکر
و ما میطوانیم

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #81 : 15 آذر 1391، 01:10 ق‌ظ »

سلام دوستان


من کدش رو پیدا کردم:

procedure TForm1.dbsaveimage(mfilename, mfldname: String);
var
  ms : TMemoryStream ;
begin
  ms := TMemoryStream.Create ;
  ms.LoadFromFile( mfilename ) ;
  ms.Position := 0 ;
  ZQuery1.SQL.Clear ;
  ZQuery1.SQL.Add( 'insert into imagelist ( cimage ) values ( :cimage )' ) ;
  ZQuery1.Params.Items[ 0 ].LoadFromStream( ms, ftBlob )  ;
  ZQuery1.ExecSQL ;
  ms.Free

کدش رو پیدا کردم -تو سایت اصلی-این بخش ایتم صفر منظورش همون فیلد اول نیست؟اولین پارام؟

ارسال پارام روش مناسب تری هست؟

SP ها چطور میشه جایی دخیره کرد؟ این قابلیت وجود داره.


من هنوز با ارسال پارام به نتیجه نرسیدم وخطا میده.دوباره امتحان میکنم ببینم به کجا میرسم.

سپاس  :)
و ما میطوانیم

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #82 : 15 آذر 1391، 07:35 ق‌ظ »
سلام
آفرین  =D> =D>
جوینده یابنده است  :)
این بخش ایتم صفر منظورش همون فیلد اول نیست؟اولین پارام؟
بله درسته شما میتونید پامتر ها رو با نامشون یا به ترتیب index فراخونی کنید. هر دو روش یکیه .
ارسال پارام روش مناسب تری هست؟
دقیق نمیدونم ولی این روش اصولی تر هستش و میشه تمام نوع داده هایی رو به پایگاه ارسال کرد در حالی که روش معمول محدودیت هایی دارید .
SP ها چطور میشه جایی دخیره کرد؟ این قابلیت وجود داره.
منظورتون چیه؟ SP ها تو پایگاه داده ذخیره میشن و میتونید اونجا کدشون رو ببینید. اگه از Mysql Workbench استفاده می کنید میتونید توی Routines اون SP رو پیدا کنید. البته تو ویندوز برنامه های بیتشری برای کار با Mysql پیدا میشه که معمولا باید کرک بشن ولی امکانات قابل توجهی دارن.
میتونید از PHPMyadmin هم استفاده کنید. باید apache روی سیستمتون نصب کنید و همینطور PHP بعد با phpmyadmin هم میتونید روی پایگاه داده کار کنید.(هرچند برناه تحت وب چندان به خوبی برنامه های معمولی و با سرعت بالا و امکانات اونها نیستن)
موفق باشید

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #83 : 15 آذر 1391، 07:43 ق‌ظ »
دوباره سلام
یادم رفت یه خبر دیگه رو هم بدم.  ;D
دیروز ویرایش ۱.۰۴ لازاروس هم منتشر شد.
تو لینک زیر باگ هایی که در ویرایش  قبلی بوده و توی اون رفع شده میتونید ببینید.
http://wiki.lazarus.freepascal.org/Lazarus_1.0_fixes_branch#Fixes_for_1.0.4_.28Merged.29
یا حق

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #84 : 15 آذر 1391، 12:19 ب‌ظ »


سلام 
 :)

دوباره سلام
یادم رفت یه خبر دیگه رو هم بدم.  ;D
دیروز ویرایش ۱.۰۴ لازاروس هم منتشر شد.
تو لینک زیر باگ هایی که در ویرایش  قبلی بوده و توی اون رفع شده میتونید ببینید.
http://wiki.lazarus.freepascal.org/Lazarus_1.0_fixes_branch#Fixes_for_1.0.4_.28Merged.29
یا حق

خبر خیلی خوبی بود واینکه باگ های زیادی هم رفع شد.

پس کد ذخیره سازی که گذاشتم درست هست.

سلام
آفرین  =D> =D>
جوینده یابنده است  :)
منظورتون چیه؟ SP ها تو پایگاه داده ذخیره میشن و میتونید اونجا کدشون رو ببینید. اگه از Mysql Workbench استفاده می کنید میتونید توی Routines اون SP رو پیدا کنید. البته تو ویندوز برنامه های بیتشری برای کار با Mysql پیدا میشه که معمولا باید کرک بشن ولی امکانات قابل توجهی دارن.
میتونید از PHPMyadmin هم استفاده کنید. باید apache روی سیستمتون نصب کنید و همینطور PHP بعد با phpmyadmin هم میتونید روی پایگاه داده کار کنید.(هرچند برناه تحت وب چندان به خوبی برنامه های معمولی و با سرعت بالا و امکانات اونها نیستن)
موفق باشید


تشکر.
ولی من جایی خوندم Phpmyadmin قابلیت اجرای SP ها رو نداره.

و ما میطوانیم

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #85 : 15 آذر 1391، 06:58 ب‌ظ »
سلام
پس کد ذخیره سازی که گذاشتم درست هست.
بله تقریبا روش همینه.
ولی من جایی خوندم Phpmyadmin قابلیت اجرای SP ها رو نداره.
شاید اینطور که شما میگید باشه . من تا الان نرفتم با phpmyadmin یک sp ایجاد یا مشاهده کنم فقط می دونستم تحت وب با MySQL کار میکنه و ساختن جدول رو هم دیده بودم. اگه بتونه query اجرا کنه میتونه SP هم بسازه ولی من خودم تا الان تست نکردم.
با این حال اگه خواستی تو ویندوز با MySQL کار کنی برنامه Navicat for MySQL رو پیدا کن و نصب کن واقعا خیلی کار رو راحت کرده و محیط نوشتن query توش خیلی امکانات خوبی داره. تو گنو/لینوکس نتونستم برنامه جالبی پیدا کنم.غیر workbench شاید 2 یا 3 تا برنامه بیشتر نباشه که با mysql کار میکنند و امکانات خیلی محدودی دارن.

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #86 : 16 آذر 1391، 11:28 ب‌ظ »

سلام

با تشکر از لطف شما   

توی تعریف routine ها در workbench تفاوت خاصی بین function و procedure وجود داره؟

تفات in و out در چیه؟موقع تعریف procedure.



سپاس   :)
و ما میطوانیم

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #87 : 17 آذر 1391، 02:52 ب‌ظ »
توی تعریف routine ها در workbench تفاوت خاصی بین function و procedure وجود داره؟

تفات in و out در چیه؟موقع تعریف procedure.
سلام
تفاوت function و procedure مربوط به workbench نمیشه. این دو نوع در SQL و خاصیت های دستوری اون گنجانده شده اند و به یک برنامه خاص وابسته نیستند.
function ها توابعی هستند که فقط یک مقدار عددی را در خروجی خود دارند و مثل همه توابع SQL فراخوانی می شوند. برای ارسال خروجی در Function باید از دستور RETURN استفاده شود.
procedure ها توابعی هستند که چندین خروجی می توانند داشته باشند و برای فراخوانی نیاز به استفاده از دستور Call دارند.در تعریف پارمتر های توابع در procedure سه کلمه IN و OUT و INOUT استفاده می شود که ورودی یا خروجی یا ورودی/خروجی بودن پارامتر را مشخص می کند.
یا حق

آفلاین aliboy

  • High Sr. Member
  • *
  • ارسال: 558
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #88 : 18 آذر 1391، 08:19 ب‌ظ »

سلام

با تشکر از لطف شما

احساس میکنم دریافت ورودی عددی-Int و  رشته ای -String با دلفی  متفاوتر هست.من وقتی عددی توی TEdit1 یا رشته ای در Tedit2 قرار میدم برنامه اونها رو null در نظر میگیره.
مثل اینه تابع StrToInt برای ورودی عددی بیهودس.
و ما میطوانیم

آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
پاسخ : برنامه نویسی با Lazarus
« پاسخ #89 : 19 آذر 1391، 07:16 ق‌ظ »

سلام

با تشکر از لطف شما

احساس میکنم دریافت ورودی عددی-Int و  رشته ای -String با دلفی  متفاوتر هست.من وقتی عددی توی TEdit1 یا رشته ای در Tedit2 قرار میدم برنامه اونها رو null در نظر میگیره.
مثل اینه تابع StrToInt برای ورودی عددی بیهودس.
سلام
من درست متوجه منظورتون نشدم ولی من تا الان همچین مشکلی نداشتم و هم رشته ای و هم عددی استفاده کردم و تابع strtoint هم زیاد استفاده می کردم و درست کار میکرد. هرچند الان تو برنامه های جدید دیدم که از تابع strtoint64 استفاده میشه و متغیر های int هم از نوع ۶۴ بیتی تعریف میشن تا برنامه تو سیستم های 64 بیتی هم به خوبی کار کنه.