hp1361
یک شنبه 07 بهمن 1386, 09:19 صبح
سلام
دوستان کد های مربوط به DBGrid رو براتون میزارم اگه میشه راهنمایی بفرمایین .
جستجو هم کردم و اون موارد رو هم بکار بردم اما افاقه نکرد .
با شروع برنام رکورد های مربوط به تاریخ روز جاری که ممکنه چند ساعت قبلش ذخیره شده باشه از جدول Main به جدول TempMain انتقال پیدا میکنه
procedure TFormNew2.FormCreate(Sender: TObject);
begin
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Delete * From TableTempMainData');
DataModule1.ADOQueryMainToTemp.ExecSQL;
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Insert Into TableTempMainData');
DataModule1.ADOQueryMainToTemp.SQL.Add('Select *');
DataModule1.ADOQueryMainToTemp.SQL.Add('From TableMainData');
DataModule1.ADOQueryMainToTemp.SQL.Add('Where RegDate='''+FormMain.ClassShamsi1.Shamsi+''' ORDER BY ServiceCode');
DataModule1.ADOQueryMainToTemp.ExecSQL;
end;
procedure TFormNew2.FormActivate(Sender: TObject);
begin
DataModule1.ADOTableTempMainData.Active:=True;
DataModule1.ADOTableTempMainData.Properties['Update Criteria'].Value :=adCriteriaKey;
DataModule1.ADOTableTempMainData.Open;
DataModule1.ADOTableServicesData.Active:=True;
DataModule1.ADOTableServicesData.Open;
end;
procedure TFormNew2.FormDeactivate(Sender: TObject);
begin
DataModule1.ADOTableMainData.Active:=False;
DataModule1.ADOTableMainData.Close;
DataModule1.ADOTableServicesData.Active:=False;
DataModule1.ADOTableServicesData.Close;
end;
قبلا خیلی با جدول اصلی ور رفتم اما به جایی نرسیدم . چون تو جدولم دو تا کلید تعریف کرده (ServiceCode,RegDate( گفتم اگه اطلاعات رو توی یک جدول دیگه ذخیره کنم و با ذخیره شدن اطلاعات بین این دوتا جدول ردو بدل بشه مشکل حل میشه .برای همین یک جدول از جنس جدول اصلی انتخاب کردم .
procedure TFormNew2.cxButtonSaveClick(Sender: TObject);
begin
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Update TableTempMainData Set RegDate='''+MaskEditDate.Text+'''');
DataModule1.ADOQueryMainToTemp.ExecSQL;
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Delete * From TableMainData Where RegDate='''+MaskEditDate.Text+'''');
DataModule1.ADOQueryMainToTemp.ExecSQL;
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Insert Into TableMainData Select * From TableTempMainData Order By ServiceCode');
DataModule1.ADOQueryMainToTemp.ExecSQL;
end;
فکر کنم توی جدول پارادکس بود که اگر جدولم خالی بود و من دکمه حذف رو میطدم اروری نمیداد . اما اینجا این ارور خیلی اذیتم میکنه برای همین تو بلاک گذاشتمش
procedure TFormNew2.cxButtonDeleteClick(Sender: TObject);
begin
Try
DataModule1.ADOTableTempMainData.Edit;
DataModule1.ADOTableTempMainData.Delete;
Except
FormMessages.ShowSmartMessage('äÏÇÑÏ æÌæÏ ˜ÑÏä ÍÐÝ ÈÑÇí јæÑÏí <hr><br>ÏåíÏ ÝÔÇÑ Esc Ϙãå ÇäÕÑÇÝ ÕæÑÊ ÏÑ *','','ÇØáÇÚÇÊ æÑæÏ ÏÑ ÎØÇ');
end;
end;
در این قسمت جدول سرویس های پیش فرض با سرویس های موجود در جدول TempMain مقایسه میشه و اون سرویس هایی که در جدول TempMain نیست بهش اضافه میشه
procedure TFormNew2.cxButton2Click(Sender: TObject);
begin
//æÇÑÏ ßÑÏä ÓÑæíÓ åÇí íÔ ÝÑÖ ÇÒ ÌÏæá ÓÑæíÓ åÇ
DataModule1.ADOQueryMainToTemp.Close;
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Insert Into TableTempMainData(ServiceCode,ServiceName) Select ServiceCode,ServiceName From TableServicesData Where ServiceCode Not In (Select ServiceCode From TableTempMainData)');
DataModule1.ADOQueryMainToTemp.ExecSQL;
چون بعد از اضافه شدن اطلاعات در DBGrid نمایش داده نمیشد دستور Requery رو میدم
DataModule1.ADOTabletEMPMainData.Requery();
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Update TableTempMainData Set RegDate='''+MaskEditDate.Text+'''');
DataModule1.ADOQueryMainToTemp.ExecSQL;
end;
چون من به جمع تمام سطر ها و ستون ها نیاز دارم بایستی اطلاعات وارد شده در جدول ذخیره بشن تا بتونم با یک Query جمعشون رو بدست بیارم و تا زمانی که اطلاعات وارد شده ذخیره نشن Query چیزی رو بر نمیگردونه برای همین دستور زیر رو نوشتم
procedure TFormNew2.DBGridEh1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
DataModule1.ADOTableTempMainData.Edit;
DataModule1.ADOTableTempMainData.Post;
end;
end;
دوستان من هر کاری میکنم یه جای کار میلنگه .
ذخیره رو درست میکنم حذف کردن ارور میده ، حذف رو درست میکنم رکورد اضافه کردن ارور میده ، اونو درست میکنم مقدار مبلغ رو با توجه به تعداد بدست نمیاره
لطفا راهنمایی کنید خیلی وقته دارم باهاش کلنجار میرم (شاید دو ما) دیگه داره ازش بدم میاد
اگه میشه یکی یه نمونه DBGRid که بشه توش ویرایش و حذف و اضافه رو کرد بزاره ممنون میشم
دوستان کد های مربوط به DBGrid رو براتون میزارم اگه میشه راهنمایی بفرمایین .
جستجو هم کردم و اون موارد رو هم بکار بردم اما افاقه نکرد .
با شروع برنام رکورد های مربوط به تاریخ روز جاری که ممکنه چند ساعت قبلش ذخیره شده باشه از جدول Main به جدول TempMain انتقال پیدا میکنه
procedure TFormNew2.FormCreate(Sender: TObject);
begin
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Delete * From TableTempMainData');
DataModule1.ADOQueryMainToTemp.ExecSQL;
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Insert Into TableTempMainData');
DataModule1.ADOQueryMainToTemp.SQL.Add('Select *');
DataModule1.ADOQueryMainToTemp.SQL.Add('From TableMainData');
DataModule1.ADOQueryMainToTemp.SQL.Add('Where RegDate='''+FormMain.ClassShamsi1.Shamsi+''' ORDER BY ServiceCode');
DataModule1.ADOQueryMainToTemp.ExecSQL;
end;
procedure TFormNew2.FormActivate(Sender: TObject);
begin
DataModule1.ADOTableTempMainData.Active:=True;
DataModule1.ADOTableTempMainData.Properties['Update Criteria'].Value :=adCriteriaKey;
DataModule1.ADOTableTempMainData.Open;
DataModule1.ADOTableServicesData.Active:=True;
DataModule1.ADOTableServicesData.Open;
end;
procedure TFormNew2.FormDeactivate(Sender: TObject);
begin
DataModule1.ADOTableMainData.Active:=False;
DataModule1.ADOTableMainData.Close;
DataModule1.ADOTableServicesData.Active:=False;
DataModule1.ADOTableServicesData.Close;
end;
قبلا خیلی با جدول اصلی ور رفتم اما به جایی نرسیدم . چون تو جدولم دو تا کلید تعریف کرده (ServiceCode,RegDate( گفتم اگه اطلاعات رو توی یک جدول دیگه ذخیره کنم و با ذخیره شدن اطلاعات بین این دوتا جدول ردو بدل بشه مشکل حل میشه .برای همین یک جدول از جنس جدول اصلی انتخاب کردم .
procedure TFormNew2.cxButtonSaveClick(Sender: TObject);
begin
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Update TableTempMainData Set RegDate='''+MaskEditDate.Text+'''');
DataModule1.ADOQueryMainToTemp.ExecSQL;
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Delete * From TableMainData Where RegDate='''+MaskEditDate.Text+'''');
DataModule1.ADOQueryMainToTemp.ExecSQL;
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Insert Into TableMainData Select * From TableTempMainData Order By ServiceCode');
DataModule1.ADOQueryMainToTemp.ExecSQL;
end;
فکر کنم توی جدول پارادکس بود که اگر جدولم خالی بود و من دکمه حذف رو میطدم اروری نمیداد . اما اینجا این ارور خیلی اذیتم میکنه برای همین تو بلاک گذاشتمش
procedure TFormNew2.cxButtonDeleteClick(Sender: TObject);
begin
Try
DataModule1.ADOTableTempMainData.Edit;
DataModule1.ADOTableTempMainData.Delete;
Except
FormMessages.ShowSmartMessage('äÏÇÑÏ æÌæÏ ˜ÑÏä ÍÐÝ ÈÑÇí јæÑÏí <hr><br>ÏåíÏ ÝÔÇÑ Esc Ϙãå ÇäÕÑÇÝ ÕæÑÊ ÏÑ *','','ÇØáÇÚÇÊ æÑæÏ ÏÑ ÎØÇ');
end;
end;
در این قسمت جدول سرویس های پیش فرض با سرویس های موجود در جدول TempMain مقایسه میشه و اون سرویس هایی که در جدول TempMain نیست بهش اضافه میشه
procedure TFormNew2.cxButton2Click(Sender: TObject);
begin
//æÇÑÏ ßÑÏä ÓÑæíÓ åÇí íÔ ÝÑÖ ÇÒ ÌÏæá ÓÑæíÓ åÇ
DataModule1.ADOQueryMainToTemp.Close;
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Insert Into TableTempMainData(ServiceCode,ServiceName) Select ServiceCode,ServiceName From TableServicesData Where ServiceCode Not In (Select ServiceCode From TableTempMainData)');
DataModule1.ADOQueryMainToTemp.ExecSQL;
چون بعد از اضافه شدن اطلاعات در DBGrid نمایش داده نمیشد دستور Requery رو میدم
DataModule1.ADOTabletEMPMainData.Requery();
DataModule1.ADOQueryMainToTemp.SQL.Clear;
DataModule1.ADOQueryMainToTemp.SQL.Add('Update TableTempMainData Set RegDate='''+MaskEditDate.Text+'''');
DataModule1.ADOQueryMainToTemp.ExecSQL;
end;
چون من به جمع تمام سطر ها و ستون ها نیاز دارم بایستی اطلاعات وارد شده در جدول ذخیره بشن تا بتونم با یک Query جمعشون رو بدست بیارم و تا زمانی که اطلاعات وارد شده ذخیره نشن Query چیزی رو بر نمیگردونه برای همین دستور زیر رو نوشتم
procedure TFormNew2.DBGridEh1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
DataModule1.ADOTableTempMainData.Edit;
DataModule1.ADOTableTempMainData.Post;
end;
end;
دوستان من هر کاری میکنم یه جای کار میلنگه .
ذخیره رو درست میکنم حذف کردن ارور میده ، حذف رو درست میکنم رکورد اضافه کردن ارور میده ، اونو درست میکنم مقدار مبلغ رو با توجه به تعداد بدست نمیاره
لطفا راهنمایی کنید خیلی وقته دارم باهاش کلنجار میرم (شاید دو ما) دیگه داره ازش بدم میاد
اگه میشه یکی یه نمونه DBGRid که بشه توش ویرایش و حذف و اضافه رو کرد بزاره ممنون میشم