PDA

View Full Version : احرای برنامه



minoo_f19
سه شنبه 06 دی 1390, 15:07 عصر
سلام دوستان
برای افزایش سرعت بالا اومدن برنامه چیکار باید کرد؟
من پیش فرض اکتیو کوئری هاروfalse گذاشتم ولی بازم وقتی حجم دیتابیسم میره بالا ،برنامه خیلی دیر میاد بالا!

MohsenB
سه شنبه 06 دی 1390, 15:51 عصر
سلام


مگه در شروع برنامتون چیکار میکنه؟

minoo_f19
سه شنبه 06 دی 1390, 16:20 عصر
منظورم اینه که وقتی فایل exeرو اجرا میکنم برنامه دیر باز میشه.
فرم اولم فقط توش منوی برنامست

loo30fer
سه شنبه 06 دی 1390, 16:43 عصر
پس نباید برنامتون دیر اجرا بشه مطمئنا هنگام اجرا شدن برنامتون عملیاتی رو انجام میدین برای مثال تغییر زبان که این امر توی ویندوز 7 به خاطر مشکلی که داره باعث تعویق انداختن در اجرا شدن برنامتون میشه.

mohsen24000
سه شنبه 06 دی 1390, 17:21 عصر
احتمالا یا tableی رو open می کنید و یا به دیتابیسی وصل میشید...!

MohsenB
سه شنبه 06 دی 1390, 19:16 عصر
منظورم اینه که وقتی فایل exeرو اجرا میکنم برنامه دیر باز میشه.
فرم اولم فقط توش منوی برنامست

سلام

منم منظورم این بود که چه کدهایی بعد از اجرای برنامه اجرا میشن؟

مطمئنا اتصال به یک دیتابیس وقت زیادی نمیخواد مگر اینکه توی شبکه باشه که روشهای خودشو داره .
شایدم شما در پنجره اصلی تمام اطلاعات رو تو یه جدول نشون میدین ؟
و یا برنامتون به فایلهایی اکسز میزنه که روی یه سخت افزار کند هستن؟

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

و یا خودتون برنامه رو "مرحله به مرحله" تریس کنید و ببینید از چه کدهایی برای اجرا گذر میکنه و ....


موفق باشید .

moein+
سه شنبه 06 دی 1390, 21:24 عصر
در مد دیباگ برنامه رو مرحله به مرحله اجرا کنید تا ببینید کار به کجاها میشکه (F7 و F8)، ممکنه کدهایی در سورس اصلی برنامه، رویداد ایجاد سایر فرم ها و ... نوشته شده باشه که تکنیک مناسبی نداشته و یا بهینه نیستند

minoo_f19
چهارشنبه 07 دی 1390, 10:42 صبح
ممنون از توجه همه دوستان
من خودم فکر میکنم که ارتباط با دیتابیس داره.چون وقتی که دیتابیس خالیه فایل exeسریع احرا میشه،ولی رفته رفته که اطلاعات وارد میکنیم هربار سرعت اجرای برنامه طولانی تر میشه!

soft-c
چهارشنبه 07 دی 1390, 11:36 صبح
ممنون از توجه همه دوستان
من خودم فکر میکنم که ارتباط با دیتابیس داره.چون وقتی که دیتابیس خالیه فایل exeسریع احرا میشه،ولی رفته رفته که اطلاعات وارد میکنیم هربار سرعت اجرای برنامه طولانی تر میشه!
فکر می کنم این یکی از ضعفهای دلفی در مقایسه با #c باشه . برای حل این مشکل باید به صورت دستی حافظه و مسائل مربوط به ارتباط با دیتابیس را مدیریت کنید . مثلا تا وقتی که با دیتابیس کاری ندارید ، ارتباط با بانک مورد نظر قطع باشه و ...

Mask
چهارشنبه 07 دی 1390, 12:18 عصر
فکر می کنم این یکی از ضعفهای دلفی در مقایسه با #c باشه . برای حل این مشکل باید به صورت دستی حافظه و مسائل مربوط به ارتباط با دیتابیس را مدیریت کنید . مثلا تا وقتی که با دیتابیس کاری ندارید ، ارتباط با بانک مورد نظر قطع باشه و ...
شما نمیتونید ضعف علمی یه برنامه نویس رو بزارید تقصیر دلفی.
کلیه زبانها برای چنین محاسبات و لود شدن راحت تر برنامه ،راهکارهای قابل قبولی ارایه دادند.
یکی از بهترین روشها اینه که شما ، برنامتون رو مالتی ترد کنید.
پس از اجرا شدن برنامه در یه ترد غیر از ترد اصلی برنامه کارهای اتصال به بانک و از این قبیل رو انجام بدبد.
یا یه روش دیگه این میتونه باشه که ، شما همه تیبلها یا رکوردهای تیبلهاتون رو آنن در برنامه نشون ندید.و مثلا 100 تا 100 رکورد ها رو از بانکتون واکشی کنید و خیلی روشهای دیگه.
موفق باشید.

Anis131313
چهارشنبه 07 دی 1390, 12:47 عصر
سلام
وقتی یک Application اجرا میشه همونطور که توی سورس کد فایل Project.dpr میبینید فرم ها Create میشن اولین کاری که انجام میدید این باشه که همه Connection.Connected ها را به همراه Active جداول و Query ها False کرده و سپس چک کنید و ببینید که در OnCreate هر فرم چه عملیاتی با بانک اطلاعاتی شما رابطه مستقیم دارد که با افزایش طول دیتابیس زمان برنامه شما زیاد می شود چون مطمئن باشید اگه همه موارد بالا را False کنید و ارتباط با دیتابیس قطع باشد تنها چیزی کی سرعت Load شدن را کم میکند زیاد بودن کامپوننت ها روی فرم است نه زیادی حجم دیتابیس، لطفا تلاش کنید که برنامه را بدون ارتباط با دیتابیس RUN کنید و تغییر سرعت را چک کنید و از طرفی 2 تا کار دیگر انجام دهید :
1. یک SplashForm درست کنید تا کاربر متوجه شود که روی ایکون برنامه DoubleClick کرده و منتظر باشد تا همه ی فرم ها Create شوند
2. بوسیله ی تابع CreateMutex کاری کنید که برنامه فقط یک بار اجرا شود و به چند تا Task در داخل ویندوز تبدیل نشود.

موفق باشید.

minoo_f19
چهارشنبه 07 دی 1390, 15:34 عصر
خیلی ممنون جناب Anis.من راهنمایی اولتونو انجام دادم (ارتباط با دیتابیس رو قطع کردم )و برنامم در کمتراز 3 ثانیه باز شد.در oncreate فرمها هم کدی که با
دیتابیس در رابطه باشه نداشتم.متاسفانه از اون جایی که من بسیار مبتدی هستم از راهنماییهای شماره 1و2 شما سردر نیاوردم.اگه امکانش هست توضیح بیشتری بدید
با تشکر

سعید صابری
چهارشنبه 07 دی 1390, 15:47 عصر
شماره 1و2 شما سردر نیاوردم.اگه امکانش هست توضیح بیشتری بدیدبا تشکر

1- یعنی یک فرم نمایشی اول برنامه نشان بدید(معمولا معرفی برنامه و خودتون و...) و بستن این فرم منوط به دوبار کلیک کاربر باشد
2- اگه از این سر در نیاوردید در گوگل جستجو کنید اجرای برنامه فقط یک بار.(فقط یک نسخه از برنامه شما اجرا می شود)

soft-c
چهارشنبه 07 دی 1390, 19:53 عصر
شما نمیتونید ضعف علمی یه برنامه نویس رو بزارید تقصیر دلفی.
کلیه زبانها برای چنین محاسبات و لود شدن راحت تر برنامه ،راهکارهای قابل قبولی ارایه دادند.
یکی از بهترین روشها اینه که شما ، برنامتون رو مالتی ترد کنید.
پس از اجرا شدن برنامه در یه ترد غیر از ترد اصلی برنامه کارهای اتصال به بانک و از این قبیل رو انجام بدبد.
یا یه روش دیگه این میتونه باشه که ، شما همه تیبلها یا رکوردهای تیبلهاتون رو آنن در برنامه نشون ندید.و مثلا 100 تا 100 رکورد ها رو از بانکتون واکشی کنید و خیلی روشهای دیگه.
موفق باشید.
در #c تا وقتیکه از کلاس شی نسازید و از آن استفاده نکنید حافظه ای به آن تعلق نمی گیرد و همچنین در دیتابیس وقتی شما یک عملیات را انجام می دهید به بانک وصل میشید و وقتی عملیات تمام شد ارتباط با بانک قطع میشه .

Anis131313
چهارشنبه 07 دی 1390, 22:23 عصر
در #c تا وقتیکه از کلاس شی نسازید و از آن استفاده نکنید حافظه ای به آن تعلق نمی گیرد و همچنین در دیتابیس وقتی شما یک عملیات را انجام می دهید به بانک وصل میشید و وقتی عملیات تمام شد ارتباط با بانک قطع میشه .

دوست عزیزم اینجا بهتره راه حلی برای دوستمان پیدا کنیم که تاپیک رو ایجاد کرده بزاریم که در مورد دلفی هستش، بعضی از برنامه نویس ها ترجیح میدن در سطوح 0 و 1 برنامه نویسی کنند و همه چیز را خود کنترل کنند تا اینکه شرکتی همچون مایکروسافت یا هر شرکت برنامه نویسی دیگر کنترل برنامه را در دست بگیرد...


خیلی ممنون جناب Anis.من راهنمایی اولتونو انجام دادم (ارتباط با دیتابیس رو قطع کردم )و برنامم در کمتراز 3 ثانیه باز شد.در oncreate فرمها هم کدی که با
دیتابیس در رابطه باشه نداشتم.متاسفانه از اون جایی که من بسیار مبتدی هستم از راهنماییهای شماره 1و2 شما سردر نیاوردم.اگه امکانش هست توضیح بیشتری بدید
با تشکر

خواهش میکنم.
همه ما مبتدی هستیم و کسی از دیگری بالاتر نیست...
وقتی برنامه دیر اجرا میشود کاربر احساس میکند که روی برنامه هنوز DoubleClick نکرده است و مجددا اقدام به اینکار میکند و حتی ممکنه چندین بار این کار را انجام دهد، این کار باعث می شود که در ویندوز برنامه با مکررا اجرا شود و چندین پروسه از آن در TaskManager اجرا میشود که بسته به طراحی نرم افزار ممکن است مشکلاتی به وجود آید بنابر این ما از تابعی استفاده میکنیم که کاری کند که برنامه ما فقط یک بار و همان بار اول اجرا شود و سایر کلیک های کاربر بی فایده باشد...
حال SplashForm چیست، یک فرمی را در برنامه ایجاد میکنیم مثل تمامی فرم های طراحی شده ، و بر روی آن مشخصاتی از نرم افزار می نویسیم سپس در فایل پروژه که عملیات Create کردن تمامی فرم ها در آنجاست کدی مشابه کد پایین را مینویسیم که در آن هم از SplashForm استفاده شده و هم از تابع CreateMutex :


program FanoosServer;

uses
Forms,
SysUtils,
Windows,
IdGlobal,
UserForm in 'UserForm.pas' {UserFormF},
BackGroundForm in 'BackGroundForm.pas' {BGF},
Manager in 'Manager.pas' {ManagerF},
BaseTable in 'BaseTable.pas' {BaseTableF},
MyFunction in 'MyFunction.pas',
SplashForm in 'SplashForm.pas' {SplashFormF},
TimingForm in 'TimingForm.pas' {TimingFormF},
StartForm in 'StartForm.pas' {StartFormF},
GetDirectoryForm in 'GetDirectoryForm.pas' {GetDirectoryFormF},
Moshtari in 'Moshtari.pas' {MoshtariF},
Reserve in 'Reserve.pas' {ReserveF},
SearchForm in 'SearchForm.pas' {SearchFormF};

{$R *.res}

var
hm : thandle;
begin

hm:=createmutex(nil,false,'OneCopyMutex');
if waitforsingleobject(hm,0)<>wait_timeout then
begin
ActivateKeyboardLayout($429,0);
Application.Initialize;
with TSplashFormF.Create(nil) do
try
Show;
Update;
Application.CreateForm(TBGF, BGF);
Application.CreateForm(TUserFormF, UserFormF);
Application.CreateForm(TSplashFormF, SplashFormF);
Application.CreateForm(TManagerF, ManagerF);
Application.CreateForm(TBaseTableF, BaseTableF);
Application.CreateForm(TTimingFormF, TimingFormF);
Application.CreateForm(TStartFormF, StartFormF);
Application.CreateForm(TGetDirectoryFormF, GetDirectoryFormF);
Application.CreateForm(TMoshtariF, MoshtariF);
Application.CreateForm(TReserveF, ReserveF);
Application.CreateForm(TSearchFormF, SearchFormF);
finally
Free;
end;
Application.Run;
end;
end.


در واقع SplashForm همون فرمی است که قبل اجرای برنامه می آید مثل فرم زیر که قبل از باز شدن Word باز می شود و ما که کاربر هستیم متوجه میشویم که برنامه Word باز شده اما باید صبر کنیم
79840

در مورد اینکه چه کاری انجام دهید تا زودتر برنامه Load شود نمیدانم چه اقدامی کنید چون بی خبرم از طرز استفاده شما از دیتابیس در برنامه نویسی اما یک توضیحی میدم شاید فایده ای داشته باشه.
همواره فقط 1 عدد AdoConnection داشته باشید روی فرم اصلی و بقیه AdoQuery ها را به از فرم های دیگر به آن وصل کنید و قبل از اجرای برنامه Connected و Active ها را False کنید. سپس در FormShow در فرم اصلی برنامه تان ADOConnection.Connected را True کنید. اینطوری از شر اون مشکلتون خلاص می شید. از طرفی سعی کنید Query ها را به صورت OnTime انجام دهید و در داخل کد برنامه از آنها استفاده کنید نه اینکه در حالت Design در داخل String بنویسید و نه اینکه از Query نوشتن در دیتابیس استفاده کنید. مثلا در یک فرم ثبت مشخصات کد وارد شده نباید تکراری باشد جهت چک کردن تکراری نبودن کد جدول مثلا از دستورات زیر استفاده میکنیم تا بفهمیم موجود هست یا نه :


BGF.ADOQuery2.Active:=False;
BGF.ADOQuery2.SQL.Clear;
BGF.ADOQuery2.SQL.Add('Select * From BaseShahr Where S_Code='+EditMV1.Text);
BGF.ADOQuery2.Active:=True;
if not BGF.ADOQuery2.IsEmpty then
IsIns:=ShowErrorMSG(EditMV1,0,'------------------------');


تابع
ActivateKeyboardLayout($429,0);
هم که زبان را از انگلیسی به فارسی عوض می کند البته در XP چون در Vista و 7 قضیه کمی فرق می کند.

به هر حال دوستان ببخشید که اگه ساده جواب دادم ، علم من هم در همین حد هستش ...
موفق باشید.

MohsenB
چهارشنبه 07 دی 1390, 23:57 عصر
سلام


یکی از دلایلی که باعث کند شدن اجرای برنامه می شود همین روشی است که آقا مختار انجام دادن . نباید در ابتدای شروع برنامه همه فرم ها رو ساخت زیرا هم حافظه اضافی اشغال میکند و هم اگر فرمی ساخت کندی داشته باشد جلو کل برنامه را میگیرد . شما باید هر فرم یا هر کاری را در زمانی که مورد نیاز است بسازید برای مثال ساخت فرم جستجو در اول شروع برنامه چه ضرورتی دارد .

برای تشخیص اینکه برنامه در حال اجرا میباشد یا خیر بهتر است از روش و کد زیر استفاده کنید :

// Check for Previous Instance
CreateMutex(nil, false, '[ProgramName]');

// If ERROR_ALREADY_EXISTS, then Check for Command Line Arguments
if GetLastError = ERROR_ALREADY_EXISTS then
ShowMessage('برنامه در حال اجرا مي باشد');
Halt(0);
end;
این کد اجرا شد دوباره برنامه را چک کرده و در صورت آن با نمایش پیغام از برنامه خارج میشود .


مورد بعد اینکه سعی کنید کل برنامه بصورت پیمانه ای باشد یعنی برنامه را به بخش های مختلف تقسیم کنید و به هر بخش وظیفه خاصی محول کنید برای مثال تمام کارهای مربوط به عملیات روی دیتابیس را در یک ماژول قرار دهید . برای اینکار دلفی ماژولی به نام "DataModule" دارد که چبزی شبیه به فرم میباشد و gلی قابلیت نمایش را ندارد . شما میتوانید از این ماژول برای قرار دادن اشیاء مربوط به کار با دیتابیس استفاده کنید . این کار بسیاری مزایای دیگر نیز دارد .

بعد از پیمانه ای کردن برنامه هر بخش را در موقع لزوم فراخوانی کرده و در صورت عدم نیاز آن را از حافظه خارج کنید . برای مثال یک سناریو این است که بعد از اجرای برنامه محیط کاربری نمایش داده شود و بعد از آن اطلاعات بارگذاری شوند و در طول بارگذاری به کاربر پروگرسی نمایش داده شود ،، ویا اگر مقدار موارد بارگذاری مشخص است شبیه کدی که آقا مختار نوشتن بعد از نمایش اسپلش عملیات آغاز و بعد از پایان عملیات اسپلش بسته شود .


کارهای دیگری مثل : استفاده از منابع مشترک در داخل و خارج برنامه ، تقسیم فایل اجرایی اصلی ، طراحی بانک اطلاعاتی به بهترین و کوچکترن حجم ، طریقه نمایش بهینه داده ها روی اشیائی مثل جداول و ... از دیگر راههای بهبود سرعت برنامه می باشد .


موفق باشید

Anis131313
پنج شنبه 08 دی 1390, 00:59 صبح
سلام
محسن جان چیکار کنیم پس؟ خود دلفی این فایل رو Generate میکنه ، من حرف های شما رو متوجه شدم اما این رو متوجه نشدم که فرم Search من که در تمامی فرم های دیگر به دردم میخوره چرا نباید اول کار درست بشه و دوم اینکه چه جوری میشه یه برنامه RUN بشه اما چند فرمش در اول کار Create نشه. برامون یه مثال میزنید ؟

MohsenB
پنج شنبه 08 دی 1390, 01:31 صبح
سلام
محسن جان چیکار کنیم پس؟ خود دلفی این فایل رو Generate میکنه ، من حرف های شما رو متوجه شدم اما این رو متوجه نشدم که فرم Search من که در تمامی فرم های دیگر به دردم میخوره چرا نباید اول کار درست بشه و دوم اینکه چه جوری میشه یه برنامه RUN بشه اما چند فرمش در اول کار Create نشه. برامون یه مثال میزنید ؟

سلام

این یه مثال بود ولی روش اینجوریه :

شما فرم هایی رو که در ابتدای اجرای برنامه اصلا بهشون کاری ندارید را نسازید برای این کار یا از تو همین خط ها اونها رو پاک کنید و یا از منوی Project گزینه Options رو انتخاب کنید و به برگ Forms برید و فرم هایی رو که میخواید از ساخت اوتوماتیک بیرون ببرین به لیست سمت راست یا همون Available Forms ببرید و پنجره را تایید کنید . این دو کار یکی هستند .

سپس هر جایی از برنامه که نیاز به اون فرم ها دارین اونها رو ساخته و نمایش بدین به این صورت:

اول بسته به نیازتون که اون فرم عمرش تو یه تابع مثلا کلیک یه فرم هست یا اینکه عمرش در طول باز شدن یه فرم هست متغییر از نوع فرم مورد نظر رو تعریف کنید . مثلا اگر قراره تو رویداد یه دکمه یه فرم بصورت Modal باز بشه و بعد از بسته شدن نیازی بهش نباشه ( مثل یه جستجو ) این متغییر رو تو همون رویداد تعریف کنید :

var frmSearch : TfrmSearch;

خوب حالا نوبت ساخت فرم هست که به این روش ساخته میشه :

frmSearch:= TfrmSearch.Create(self);

و بعد از اون باید اونو نمایش بدین و اگر تغییر یا مقدار اولیه یا تنظیمی قراره صورت بگیره قبل از نمایش انجام بدین :

frmSearch.Show;
ویا
frmSearch.ShowModal;

و بعد از اتمام کار فرم اونو از حافظه پاک کنید :

frmSearch.Free;

البته یه راه خیلی آسون و میانبر برای مواردی که طول عمر یک فرم فقط یک تابع هست این راهه که نیاز به تعریف هیچ متغییری هم نداره :

with TfrmSearch.Create(self) do begin
showModal;
Free;
end;

و توضیح آخر اینکه منظورم از طول عمر این نیست که فکر کنید خوب من به فرم جستجو تو یه فرم همیشه نیاز دارم ، باید اینجوری فکر کنید که این فرم تعداد بار کمی نیاز هست . البته بازم به نوع طراحی شما بستگی داره . اگر از همون روش پیمانه ای استفاده کرده باشید این فرم جستجو فرمی است که فقط رابطیست برای درخواست خواسته ای از واحد دیتابیس . و ...


موفق باشید

Anis131313
پنج شنبه 08 دی 1390, 01:47 صبح
واقعا بزرگواری کردین محسن جان که وقت گذاشتید، خیلی ممنون. خیلی عالی بود. مرسی.

soft-c
پنج شنبه 08 دی 1390, 10:11 صبح
یکی از راه های کاهش حافظه ی مورد استفاده این است که اگر مثلا در برنامه از متن های ایستا زیاد استفاده می کنید ، مثلا از label استفاده می کنید (تعداد زیاد) هنگامی که کامپوننتها را روی فرم می گذارید ، همانطور که می بینید این کامپوننتها به کلاس فرم اضافه می شوند ، برای کاهش حجم حافظه یکی از label ها را گذاشته و بقیه را پاک کنید(شی های ساخته شده در کلاس فرم) آنوقت هم حجم کلاس فرم کم می شود (از لحاظ تعداد کد) و هم حافظه ی کمتری صرف می شود .

minoo_f19
پنج شنبه 08 دی 1390, 10:50 صبح
سلام دوستان
ممنونم از توجه و راهنمایی های همتون.در ضمن میخواستم بدونم استفاده از کد زیر در یونیت project برنامه برای جاوگیری از اجرای مجدد برناامه صحیحه یا نه؟
Var
hm : THandle
Begin
hm:=Createmutex(Nil,False,'OneCopyMutex
If WaitForSingleObject(hm,0)<>Wait_TimeOut Then
Begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
End;

soft-c
پنج شنبه 08 دی 1390, 12:15 عصر
begin
ActivateKeyboardLayout($429,0);
Application.Initialize;
with TSplashFormF.Create(nil) do
try
Show;
Update;

میشه بگین این upadte کارش اینجا چیه؟
تشکر

soft-c
پنج شنبه 08 دی 1390, 12:20 عصر
سلام دوستان
ممنونم از توجه و راهنمایی های همتون.در ضمن میخواستم بدونم استفاده از کد زیر در یونیت project برنامه برای جاوگیری از اجرای مجدد برناامه صحیحه یا نه؟
Var
hm : THandle
Begin
hm:=Createmutex(Nil,False,'OneCopyMutex
If WaitForSingleObject(hm,0)<>Wait_TimeOut Then
Begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
End;
تست کردم جواب داد . فقط باید یک else هم برای if درست کنید که اگر برنامه در حال اجرا بود پیغام مناسب را بدهد .

minoo_f19
پنج شنبه 08 دی 1390, 13:27 عصر
خیلی ممنون
خب من تا اینجا این کاراروانجام دادم..
1- active تمام کوئری ها و table هارو false کردم
2- connected مربوط به AdoConnectiuon موجود در DataMadule رو false کردم
3-از یک Splash Form و یک progressbar روی اون استفاده کردم
4-AdoConnection رو در OnShow فرم اصلی برنامه true کردم
.
.
فقط نمیدونم کار آخرم درسته یا نه؟

soft-c
پنج شنبه 08 دی 1390, 13:59 عصر
خیلی ممنون
خب من تا اینجا این کاراروانجام دادم..
1- active تمام کوئری ها و table هارو false کردم
2- connected مربوط به AdoConnectiuon موجود در DataMadule رو false کردم
3-از یک Splash Form و یک progressbar روی اون استفاده کردم
4-AdoConnection رو در OnShow فرم اصلی برنامه true کردم
.
.
فقط نمیدونم کار آخرم درسته یا نه؟
شما حتی می توانید رویداد true کردن adoconnection را هنگام کلیک بر روی باتن انجام بدهید ، مشروط به اینکه :
1- دستورات مربوط به adoquery را بعد از ان بنویسید .
2- نیازی به نمایش دادن اطلاعات بانک ندارید . مثلا یک dbgrid دارید که اطلاعات را که قبلا وارد کرده اید را نمایش می دهد ، پس connection باید همیشه true باشه تا dbgrid بتونه اطلاعات را نمایش بدهد .
در اخر هم ، در باتن پس از انجام عملیات مانند insert و ... می توانید ان را free کنید .البته همانطور که گفتم مراقب باشید adoconnection را که آزاد می کنید با گزینه ی 2 ارتباط نداشته باشد .

soft-c
پنج شنبه 08 دی 1390, 14:41 عصر
دوستان من یک splash درست کردم و روی آن یک عکس گذاشتم و کد source اون را هم به این صورت تغییر دادم :

program Project1;

uses
Forms,
Dialogs, Windows,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {splash},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4};

{$R *.res}
var i,j:Integer;
begin
splash:=Tsplash.Create(Application);
splash.Show;
Application.Initialize;
splash.Update;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
splash.Close;
splash.Free;
Application.Run;
end.

ولی تا اجرا میکنم صفحه ی splash خیلی سریع اجرا میشه ، تا حدیکه اصلا عکس داخل آن پیدا نیست . چه راه حلی پیشنهاد می کنید .
بعد هم که برنامه اجرا میشه دو صفحه ساخته میشه که هرکدوم را که ببندیم برنامه از حالت اجرا خارج میشه .

ariobarzan
پنج شنبه 08 دی 1390, 23:56 عصر
با دستور sleep یک تاخیر مناسب ایجاد کن قبل از اینکه splash رو ببندی

Mahmood_M
جمعه 09 دی 1390, 04:04 صبح
ولی تا اجرا میکنم صفحه ی splash خیلی سریع اجرا میشه ، تا حدیکه اصلا عکس داخل آن پیدا نیست . چه راه حلی پیشنهاد می کنید .
اینکه Splash سریعا بسته میشه به خاطر کم و سریع بودن عملیاتی هست که در حین نمایش اون انجام میشه ! ، برای نمایش بیشتر فرم Splash می تونید از یک Timer استفاده کنید ، توی این تاپیک (barnamenevis.org/showthread.php?315555-مشکل-در-نمایش-فرم-Login-قبل-از-فرم-اصلی-برنامه) یک نمونه برنامه وجود داره که می تونه کمکتون کنه ...

بعد هم که برنامه اجرا میشه دو صفحه ساخته میشه که هرکدوم را که ببندیم برنامه از حالت اجرا خارج میشه .
برای حل این مشکل ، خط زیر رو به ابتدای کدهاتون انتقال بدید ( قبل از Create کردن فرم Splash )

Application.MainFormOnTaskbar := True;
موفق باشید ...