PDA

View Full Version : ثبت شدن رکوردهای تکراری در SQL Server2000



nilufari
شنبه 19 فروردین 1385, 19:09 عصر
سلام ...
برنامه ای تحت اس کیو ال 2000 و دلفی برای یکی از ادارات نوشته ام برنامه در تمام قسمتهای خود درست عمل میکند ... حالا مشکلی که واقعا منو کلافه کرده و کاملا به بن بست رسیده ام اینه که در یه قسمت از برنامه در زمان ثبت مثلا یک رکورد ، بعد از گزارشگیری مشاهده میشود که بعضی از این رکوردها را بصورت تکراری و پشت سر هم در دیتابیس ثبت شده است.
کد قسمت مربوطه را هم که در رویداد OnClick یک کلید قرار دارد کاملا بررسی کرده ام و خیلی عادی به نظر میرسد.
قابل توجه اینکه این داستان بصورت اتفاقی برروی بعضی رکودها پیش میاید و در نتیجه ثبت رکورد تکراری مغایرت در حسابداری اداره مربوطه بوجود میاید .

لطفا دوستان نظر بدهند و مشکل منو حل بفرمایند.

hr110
یک شنبه 20 فروردین 1385, 14:42 عصر
کدی که برای درج استفاده میکنید را در اینجا قرار دهید.

شمار از QUERY استفاده میکنید؟

saniak_robot
دوشنبه 21 فروردین 1385, 10:38 صبح
اگه کد رو در اینجا قرار بدین دوستان و من می تونیم کمکتون کنیم .




موفق باشید .

nilufari
سه شنبه 22 فروردین 1385, 17:39 عصر
بله ، من از Query استفاده کرده ام . البته کد کلید فشرده شده را من اینجا میزارم ... دوستان بررسی کنند شاید به نتیجه برسیم .

توضیح اینکه در این پروسیجر با فشردن کلید تایید ، یک فیش تایید میشود . به این صورت که یک فلاگ از بانک فیشها ست میشود(در ADODataSet1) و به بانک درامدها (ADODataSet9) اضافه میشود . حال چرا در قسمت درامدها بصورت تکراری و 2 یا 3 یا 4 ویا بیشتر ثبت میشود ، به نتیجه نرسیدم .


ضمنا برای این دو بانک من این مقادیر رو ست کردم -- CursorLocation=clUseClient , CursorType=ctDynamic

اینم کد کلید تایید :



procedure Ttaid_p_naghd.BitBtn1Click(Sender: TObject);
begin
Dm1.ADODataSet1.Close;
Dm1.ADODataSet1.CommandText:='select * from fish where serial_fish='+Edit8.Text;
Dm1.ADODataSet1.Open;
Dm1.ADODataSet1.First;
While Not Dm1.ADODataSet1.Eof Do
Begin
Dm1.ADODataSet1.Edit;
Dm1.ADODataSet1['date_p']:=MaskEdit2.Text;
Dm1.ADODataSet1['date_jari_tp']:=MaskEdit1.Text;
Dm1.ADODataSet1['user_taid']:=Form1.name_user;
Dm1.ADODataSet1['flag_tas']:='1';
Dm1.ADODataSet1.Post;
Dm1.ADODataSet1.Next;
End;

Dm1.ADODataSet9.Close;
Dm1.ADODataSet9.CommandText:='select * from daramad';
Dm1.ADODataSet9.Open;

Dm1.ADODataSet1.Close;
Dm1.ADODataSet1.CommandText:='select * from fish where serial_fish='+Edit8.Text;
Dm1.ADODataSet1.Open;
Dm1.ADODataSet1.First;
While Not Dm1.ADODataSet1.Eof Do
Begin
Dm1.ADODataSet9.Append;
Dm1.ADODataSet9['serial_fish']:=strtoint(Edit8.Text);
Dm1.ADODataSet9['date_p']:=MaskEdit2.Text;
Dm1.ADODataSet9['serial_sanad']:=strtoint(Edit8.Text);
Dm1.ADODataSet9['noe_sanad']:='ÝíÔ äÞÏí';
Dm1.ADODataSet9['date_sanad']:=MaskEdit3.Text;
Dm1.ADODataSet9['bedehkar']:=Dm1.ADODataSet1['mablagh'];
Dm1.ADODataSet9['sh_hesab']:=Dm1.ADODataSet1['sh_hesab'];
Dm1.ADODataSet9['sharh_hesab']:=Dm1.ADODataSet1['sharh_hesab'];
Dm1.ADODataSet9['user_jari']:=Form1.name_user;
Dm1.ADODataSet9['date_jari_tp']:=MaskEdit1.Text;
Dm1.ADODataSet9['code_kol']:=Dm1.ADODataSet1['code_kol'];
Dm1.ADODataSet9['code_moi']:=Dm1.ADODataSet1['code_moi'];
Dm1.ADODataSet9['code_taf']:=Dm1.ADODataSet1['code_taf'];
Dm1.ADODataSet9['code_joz']:=Dm1.ADODataSet1['code_joz'];
Dm1.ADODataSet9['sharh_kol']:=Dm1.ADODataSet1['sharh_kol'];
Dm1.ADODataSet9['sharh_moi']:=Dm1.ADODataSet1['sharh_moi'];
Dm1.ADODataSet9['sharh_taf']:=Dm1.ADODataSet1['sharh_taf'];
Dm1.ADODataSet9['sharh_joz']:=Dm1.ADODataSet1['sharh_joz'];
Dm1.ADODataSet9.Post;
Dm1.ADODataSet1.Next;
end;
search_fish1.dxfCheckBox7.Checked:=True;
search_fish1.dxfCheckBox8.Checked:=False;
Dm1.ADODataSet1.Close;
Dm1.ADODataSet9.Close;
Form1.SeSkinMessage2.ShowMessage('تایید شد');
end;

nilufari
پنج شنبه 24 فروردین 1385, 18:02 عصر
منظور از DM1 همان دیتا ماژول میباشد.

shayan_delphi
پنج شنبه 24 فروردین 1385, 19:36 عصر
سلام
این WHILE برای چیه؟
همین طور پیش بره هر دفعه به ازای تعداد رکورد ها ،رکورد جدید در بانک درج میشه.

nilufari
جمعه 25 فروردین 1385, 09:16 صبح
حلقه while برای ثبت کلیه ردیفهای یک فیش میباشد.
یعنی پس از ثبت کامل فیش ، این ردیفها متناظرا داخل فایل درامد (ADODataSet9) ثبت میشوند .

shayan_delphi
جمعه 25 فروردین 1385, 19:56 عصر
با یک کلیک روی کلید ،حلقه برای مقادیر Mask Edit بصورت تکراری در جدول ثبت می شود.
این طور نیست؟


Dm1.ADODataSet9.Append;
Dm1.ADODataSet9['serial_fish']:=strtoint(Edit8.Text);
Dm1.ADODataSet9['date_p']:=MaskEdit2.Text;
Dm1.ADODataSet9['serial_sanad']:=strtoint(Edit8.Text);
Dm1.ADODataSet9['noe_sanad']:='ÝíÔ äÞÏí';
Dm1.ADODataSet9['date_sanad']:=MaskEdit3.Text;
Dm1.ADODataSet9['bedehkar']:=Dm1.ADODataSet1['mablagh'];
Dm1.ADODataSet9['sh_hesab']:=Dm1.ADODataSet1['sh_hesab'];
Dm1.ADODataSet9['sharh_hesab']:=Dm1.ADODataSet1['sharh_hesab'];
Dm1.ADODataSet9['user_jari']:=Form1.name_user;
Dm1.ADODataSet9['date_jari_tp']:=MaskEdit1.Text;
Dm1.ADODataSet9['code_kol']:=Dm1.ADODataSet1['code_kol'];
Dm1.ADODataSet9['code_moi']:=Dm1.ADODataSet1['code_moi'];
Dm1.ADODataSet9['code_taf']:=Dm1.ADODataSet1['code_taf'];
Dm1.ADODataSet9['code_joz']:=Dm1.ADODataSet1['code_joz'];
Dm1.ADODataSet9['sharh_kol']:=Dm1.ADODataSet1['sharh_kol'];
Dm1.ADODataSet9['sharh_moi']:=Dm1.ADODataSet1['sharh_moi'];
Dm1.ADODataSet9['sharh_taf']:=Dm1.ADODataSet1['sharh_taf'];
Dm1.ADODataSet9['sharh_joz']:=Dm1.ADODataSet1['sharh_joz'];
Dm1.ADODataSet9.Post;
Dm1.ADODataSet1.Next;

nilufari
جمعه 25 فروردین 1385, 22:14 عصر
خیر ، فقط در این حلقه رکوردها گاهی اوقات بصورت تکراری ثبت میشوند .


While Not Dm1.ADODataSet1.Eof Do
Begin
Dm1.ADODataSet9.Append;
Dm1.ADODataSet9['serial_fish']:=strtoint(Edit8.Text);
Dm1.ADODataSet9['date_p']:=MaskEdit2.Text;
Dm1.ADODataSet9['serial_sanad']:=strtoint(Edit8.Text);
Dm1.ADODataSet9['noe_sanad']:='ÝíÔ äÞÏí';
Dm1.ADODataSet9['date_sanad']:=MaskEdit3.Text;
Dm1.ADODataSet9['bedehkar']:=Dm1.ADODataSet1['mablagh'];
Dm1.ADODataSet9['sh_hesab']:=Dm1.ADODataSet1['sh_hesab'];
Dm1.ADODataSet9['sharh_hesab']:=Dm1.ADODataSet1['sharh_hesab'];
Dm1.ADODataSet9['user_jari']:=Form1.name_user;
Dm1.ADODataSet9['date_jari_tp']:=MaskEdit1.Text;
Dm1.ADODataSet9['code_kol']:=Dm1.ADODataSet1['code_kol'];
Dm1.ADODataSet9['code_moi']:=Dm1.ADODataSet1['code_moi'];
Dm1.ADODataSet9['code_taf']:=Dm1.ADODataSet1['code_taf'];
Dm1.ADODataSet9['code_joz']:=Dm1.ADODataSet1['code_joz'];
Dm1.ADODataSet9['sharh_kol']:=Dm1.ADODataSet1['sharh_kol'];
Dm1.ADODataSet9['sharh_moi']:=Dm1.ADODataSet1['sharh_moi'];
Dm1.ADODataSet9['sharh_taf']:=Dm1.ADODataSet1['sharh_taf'];
Dm1.ADODataSet9['sharh_joz']:=Dm1.ADODataSet1['sharh_joz'];
Dm1.ADODataSet9.Post;
Dm1.ADODataSet1.Next;
end;

shayan_delphi
شنبه 26 فروردین 1385, 19:10 عصر
من که شرطی نمی بینم!
هر بار به تعداد رکوردهای دیتاست ، رکورد درج میشه و دفعه بعد این تعداد بیشتر هم میشه.

nilufari
دوشنبه 28 فروردین 1385, 20:28 عصر
من که گفتم ... به تعداد ردیفهای فیش در دیتا ست بعدی ثبت میشود درست ! ، ولی مشکل اینجاست که این ردیفها از هر کدام چندین بار چاپ میشود .