هر سوالی راجع به دلفی داری بپرس (استاد دلفی)

farhad110

Member
اگر تاریخ برگشت مشخص است، کافیست تاریخ جاری سیستم را بگیرید و با تمام تاریخ های برگشت چک کنید (history برای برنامه هر جا که تاریخ جاری بیشتر از تاریخ برگشت باشد نام گیرنده کتاب را در یک جدول هشدار اعلام نمایید. یعنی به جای اینکه برای هر شخص این کار را انجام دهید، برنامه شما تمام اشخاص بد قول را برای شما لیست کند.
 

uaeeslami

New Member
آقاي farhad110 سلام از راهنماي شما ممنونم اگر مي شود روش نوشتن اين كدها را آموزش دهيد آخه من تازه وارد اين حرفه شده ام با تشكر
 

farhad110

Member
آقاي farhad110 سلام از راهنماي شما ممنونم اگر مي شود روش نوشتن اين كدها را آموزش دهيد آخه من تازه وارد اين حرفه شده ام با تشكر

چون چندین روش برای کد نویسی این کار وجود داره به یک مثال بسنده میکنم:
نام تاریخ امانت تاریخ برگشت وضعیت
--------------------------------------------------------------------
علی 03/01/87 10/01/87 0
رضا 05/01/87 12/01/87 1
بابک 28/01/87 04/02/87 0

شما یک فیلد وضعیت به جدول اضافه کنید که فقط 0 و 1 (true,false) رو بگیره. هر کتابی که برگشت داده میشه فیلد رو به 1 تغییر بدید.
حالا مچ گیری بد قول ها: اگر امروز 15/01/87 باشه نام تمام افرادی که تاریخ برگشت کتابشون کمتر از تاریخ جاری هست و فیلد وضعیت هم 0 هست برای شما لیست میشه (یعنی "علی"). این کار هم خیلی ساده هست (filter یا لینک امضای من)
 
آخرین ویرایش:

hamed322

New Member
آموزش گزارش گیری در دلفی با استفاده از Quick Report

سلام
خسته نباشید
ببخشید یک سوال داشتم!
من می خواهم در دلفی یک گزارش تهیه کنم به این صورت که: یک سری فیلد ها را روی یک عکس قرار بدهم که موقع چاپ فقط آن فیلد ها برای ما چاپ شوند(بدون عکس)در ضمن این فیلدها را از بانک اطلاعاتی اکسس میگیرد.
متشکرم.
 

farhad110

Member
سلام
خسته نباشید
ببخشید یک سوال داشتم!
من می خواهم در دلفی یک گزارش تهیه کنم به این صورت که: یک سری فیلد ها را روی یک عکس قرار بدهم که موقع چاپ فقط آن فیلد ها برای ما چاپ شوند(بدون عکس)در ضمن این فیلدها را از بانک اطلاعاتی اکسس میگیرد.
متشکرم.

کد:
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
QRImage1.Picture:=nil;
end;
 

fatemeh_rose

New Member
سلام و عيد همگي مبارك. من چند تا سوال داشتم:
1- در دلفي چگونه ميتوان منوها را از سممت راست شروع كرد؟ منوهاي فارسي بايد از سمت راست شروع بشن اما من نمي تونم راست چينش كنم!
2- اگه منوهاي طراحي شده چپ چين داراي كد نوشته شده باشند آيا مي توان منو را تغيير مكان داد. مثلاً اگه همه منوهام چپ چين طراحي شده و داراي كد هم باشند، مي توان آنها را راست چين كرده بدون اينكه نيازي به وشتن مجدد كدها باشد؟
3- پس از معرفي بانك خود (sql) در administratat tools مربوط به control panel پس از test پيغام زير ظاهر مي‌شود:
[microsoft][ODBC SQL Driver][shared memory]SSL Security error
Disconnecting from server
TESTS FAILED!
علت چيست؟
4- پس از برقراري ارتباط SQL با دلفي جداول چون در بانك به صورت فارسي طراحي شده اند، در دلفي به صورت ؟؟؟ ظاهر مي شود. با وجود اينكه فونت فارسي است و زبان در دلفي به صورت فارسي انتخاب شده اما نمي دانم چرا اين مشكل وجود دارد؟!
از راهنمايي هاي دوستان عزيز پيشاپيش تشكر مي كنم. همگي خسته نباشيد.
 

farhad110

Member
1- bidimode فرم اصلي رو روي bdRightToLeft تنظيم كنيد
2- مشكلي پيش نمياد
3- چرا از ODBC استفاده مي كنيد. دلفي ابزار ado رو براي راحتي شما قرار داده. اگر دليل خاصي داريد بفرمائيد وگر نه از ado استفاده كنيد.
4- regional and language options رو از كنترل پنل تنظيم كنيد
.
.
5- هر سوال در يك تاپيك پرسيده شود تا كاربراني كه مشكل مشابه دارند با سردرگمي مواجه نشوند
 

saalek110

Well-Known Member
تشکر می کنم از جناب DrXoX به خاطر این تاپیک مفید و سودمند. اجر شما با پروردگار متعال.
و تشکر می کنم از تمام اساتیدی که در این تاپیک به دیگران راهنمایی کرده اند.


ولی برای افزایش دسترسی به مطالب این تاپیک پستها را در تاپیکهایی با عنوان مناسب کپی می کنم.
فهرست در تاپیک (( آموزش دلفی در مجیدآنلاین)) زده شد.
 

Sampro

Member
سلام دوستان.
مجدد عید رو به هموتون تبریک می گم .

من سوالی در مورد دستورات خود SQL داشتم .
من یه جدول دارم که سه فیلد سال , ماه و روز داره . همچنین یه فیلد شماره فایل (پرونده) .

این جا یه ادارس . با شروع سال جدید شماره ی فایل های اون ها از یک آغاز می شه .
خوب من برای اینکه این کار رو بتونم در برنامم انجام بدم , تصمیم گرفتم که تاریخ آخرین رکورد رو بگیرم (یعنی بزرگترین تاریخ رو) بعد به اپراتور که با برنامم کار می کنه پیشنهاد کنم و اگه اون دید که سال جدید شده خودش شماره رو از یک بزنه و در غیر این صورت همون رو وارد کنه . اگه ما می خواستیم فقط مکس بزرگترین شماره فایل رو برگردونیم همیشه یک عدد بزرگی برمیگردون بنابراین مکس تاریخ رو هم به هش اضافه کردیم .

حالا تو کئری که این کار رو انجام بده مشکل دارم . می خوام که فقط تو یک کوئری انجام بشه . همون طور که گفتم برنامه باید مکس سه فیلد رو پیدا کنه همچنین باید مکس شماره ی پرونده رو هم داشته باشیم تا یکی به هش اضافه کنیم و به کاربر پیشنهاد کنیم .

این کوئری خطا داره ولی می تونه منظوره منو برسونه . پیشنهاد شما چیه؟

کد:
SELECT    MAX(stuff_File_Number) AS FileNumber
FROM      Send_Get
WHERE (stuff_Date_Year=MAX(stuff_Date_Year) AND stuff_Date_Month=MAX(stuff_Date_Month) AND stuff_Date_Day=MAX(stuff_Date_Day))
 

hamed322

New Member
سلام
farhad110 جان از بابت کد متشکرم ولی سوال من این است که :
من می خواهم در دلفی یک گزارش تهیه کنم به این صورت که: یک سری فیلد ها را روی یک عکس قرار بدهم که موقع چاپ فقط آن فیلد ها برای ما چاپ شوند(بدون عکس)، امکان این وجود دارد که عکس مورد نظر در print Preview نمایش بدهد ولی موقع چاپ ،چاپ نشود. در ضمن این فیلدها را از بانک اطلاعاتی اکسس میگیرد.

متشکرم.
 

farhad110

Member
سلام دوستان.
مجدد عید رو به هموتون تبریک می گم .

من سوالی در مورد دستورات خود SQL داشتم .
من یه جدول دارم که سه فیلد سال , ماه و روز داره . همچنین یه فیلد شماره فایل (پرونده) .

این جا یه ادارس . با شروع سال جدید شماره ی فایل های اون ها از یک آغاز می شه .
خوب من برای اینکه این کار رو بتونم در برنامم انجام بدم , تصمیم گرفتم که تاریخ آخرین رکورد رو بگیرم (یعنی بزرگترین تاریخ رو) بعد به اپراتور که با برنامم کار می کنه پیشنهاد کنم و اگه اون دید که سال جدید شده خودش شماره رو از یک بزنه و در غیر این صورت همون رو وارد کنه . اگه ما می خواستیم فقط مکس بزرگترین شماره فایل رو برگردونیم همیشه یک عدد بزرگی برمیگردون بنابراین مکس تاریخ رو هم به هش اضافه کردیم .

حالا تو کئری که این کار رو انجام بده مشکل دارم . می خوام که فقط تو یک کوئری انجام بشه . همون طور که گفتم برنامه باید مکس سه فیلد رو پیدا کنه همچنین باید مکس شماره ی پرونده رو هم داشته باشیم تا یکی به هش اضافه کنیم و به کاربر پیشنهاد کنیم .

این کوئری خطا داره ولی می تونه منظوره منو برسونه . پیشنهاد شما چیه؟

کد:
SELECT    MAX(stuff_File_Number) AS FileNumber
FROM      Send_Get
WHERE (stuff_Date_Year=MAX(stuff_Date_Year) AND stuff_Date_Month=MAX(stuff_Date_Month) AND stuff_Date_Day=MAX(stuff_Date_Day))

يك راه حل ميتونه اين باشه:
- تاريخ جاري سيستم رو بگيريد
- قسمتي رو كه مربوط به سال ميشه درون جدول جستجو كنيد
- اگر مورد مشابهي بود، يعني اينكه قبلا براي سال جديد تاريخ و شماره پرونده وارد شده -> پس يك واحد به شماره پرونده اضافه ميكنيد
- در صورتي كه مورد مشابهي نبود شماره پرونده از ابتدا شروع ميشه

اين راه حل با يك query ساده و كمي كدنويسي انجام شدني هست.
 

farhad110

Member
سلام
farhad110 جان از بابت کد متشکرم ولی سوال من این است که :
من می خواهم در دلفی یک گزارش تهیه کنم به این صورت که: یک سری فیلد ها را روی یک عکس قرار بدهم که موقع چاپ فقط آن فیلد ها برای ما چاپ شوند(بدون عکس)، امکان این وجود دارد که عکس مورد نظر در print Preview نمایش بدهد ولی موقع چاپ ،چاپ نشود. در ضمن این فیلدها را از بانک اطلاعاتی اکسس میگیرد.

متشکرم.

در آدرس زير پيگيري كنيد:
http://www.forum.majidonline.com/showthread.php?t=92271
 

Sampro

Member
سلام دوستان.
یک کد نوشتم که باید یه مقدار عددی رو از یک ادیت بگیره .
ولی ممکنه کاربر یه مقدار رشته ای وارد کنه.
می خوام خودم به کاربر پیغام بدم و برنامه اررور نده . این کدیه که من به فکرم رسیده :
کد:
  try
    StrToInt(edtFileNumber.Text);
  except on EConvertError do
    begin
      MessageDlg(strMessage,mtError,[mbOK],0);
      exit;
    end;
  end;
متاسفانه یه مشکلی که هست اینه که اگه مثلا من یه مقدار خالی یا مقدار حرفی داخل ادیت بزارم هم خود دلفی به هم اررور می ده و هم بعدش خود پیغامی که من اونجا تو کد گذاشتم .

نمی دونم مشکل از کجاست . کسی راه حلشو می دونه .



در ضمن یه سوال دیگه : تابعی تو دلفی هست که بفهمه مثلا یه رشته قابلیت تبدیل به عدد رو داره یا نه مثل IsNumber سی شارپ؟
 
آخرین ویرایش:

saalek110

Well-Known Member
در فایل exe شما همان می شود که می خواهید ولی در محیط کامپایلر همان می شود که فرمودید.
شاید تنظیماتی موجود است تا در کامپایلر هم شبیه حالت exe باشد ولی من اطلاع ندارم.
کلا try و except بعد تولید محصول(فایل exe ) عمل می کند.

راجع به سئوال دومتان من برخورد نداشتم.
تابعی با مقداری تغییر از این سایت:
http://www.howtodothings.com/computers/a1066-a-string-class-for-delphi.html
کد:
function IsNumber(str :string): Boolean;
var
  i: Integer;
begin
  Result := True;

  for i := 1 to Length(str) do

    if not (str[i] in ['0'..'9','.']) then

    begin
      Result := False;
      Exit;
    end;
end;
کد:
procedure TForm1.Button2Click(Sender: TObject);
begin
if  IsNumber(edit1.text) then showmessage('yes') else showmessage('no');
end;
 

farhad110

Member
یک کد نوشتم که باید یه مقدار عددی رو از یک ادیت بگیره .
ولی ممکنه کاربر یه مقدار رشته ای وارد کنه.
در ادامه صحبتهاي سالك عزيز براي مورد اول ميتونيد از شعار پيشگيري بهتر از درمان استفاده كنيد. كد زير رو در onchange كنترل ورودي متن بنويسيد:
کد:
if not (key in ['0'..'9']) then
  key:=#0;
براي اعداد اعشاري هم ميتونيد كاراكتر "." رو خودتون به كد اضافه كنيد.
 

Sampro

Member
ممنون سالک جان ولی می خواستم بدونم تابعی درونی برا ایم کار هست یا نه.

فرهاد جان این کدت کار نمی کنه . نوع key از نوع word هستش بنابراین char نمی پذیره.
اگه این کد درست بشه خیلی خوب می شه .


در ضمن نظرتون با ماسک ادیت چیه؟
ازش استفاده کردم فقط مشکلش اینه که کاربر با کلیک داخلش باید اول چند بار کلید لفت رو بزنه تا به اول ادیت بره و ممکنه کاربری که با این برنامه کار می کنه خبر نداشته باشه . برا این راه حلی دارین؟

ممنون
 

farhad110

Member
فرهاد جان این کدت کار نمی کنه . نوع key از نوع word هستش بنابراین char نمی پذیره.
اگه این کد درست بشه خیلی خوب می شه .
عذر خواهي! چون اينجا توي فروم تند تند مي نويسم بعضي وقتها از اين اشتباهات پيش مياد. كد رو در OnKeyPress بنويسيد. ضمنا #8 رو هم به كد اضافه كنيد (براي كليد backspace)
 

uaeeslami

New Member
سلام من يك پروژه در دلفي نوشتم حال مي خواهم بدانم آيا امكان دارد كه مثلا در edit1 تاريخ و در edit2 عدد 6 نوشته شده كه در edit3 بين اين عدد و تاريخ جمع كرده شود و تاريخ 3 روز بعد در edit3 نشان داده شود با تشكر
 

1Program

Member
سلام .

سلام من يك پروژه در دلفي نوشتم حال مي خواهم بدانم آيا امكان دارد كه مثلا در edit1 تاريخ و در edit2 عدد 6 نوشته شده كه در edit3 بين اين عدد و تاريخ جمع كرده شود و تاريخ 3 روز بعد در edit3 نشان داده شود با تشكر

یعنی چی ؟؟؟؟؟

اگر منظورت اینه که در یک Edit تاریخ جاری را داشته باشی و در Edit یک عدد داشته باشی ، سپس این دو را با هم جمع کنی و ......

بله . می تونی رشته عددی در Edit دوم را به عدد صحیح تبدیل کنی و رشته تاریخ در Edit اول را به تاریخ تبدیل کرده و با هم جمع کنی .
مثل کد زیر :
کد:
............
.......
Var
CurrentDate : TDate;
Number : Integer;
.......
.....

CurrentDate:=strtoDate(EdtDate.text) + strtoint(Number) ;

.................
 

uaeeslami

New Member
با تشكر از اقاي 1porogram اگر ممكن است كد را به صورت كامل بنويسد با تشكر
 

جدیدترین ارسال ها

بالا