ورود

View Full Version : درج شماره بصورت اتوماتیک



مجتبی جوادی
پنج شنبه 16 فروردین 1386, 00:13 صبح
دوستان عزیز سلام
من یک جدول در sql ساخته ام که یکی از فیلدهای آن شماره ترتیب بر اساس سال جاری میباشد مثلاً در سال 86 ترتیب شماره بصورت 860001 و 860002 و ... میباشد و در سال های بعدی بجاری 86 آن سال مورد نظر قرار می گیرد . حال در دلفی فرمی ساخته ام که با جدول فوق در ارتباط بوده و یک کلید در داخل فرم قرار داده ام که با زدن این کلید می خواهم بطور اتوماتیک برای هر رکورد شماره مورد نظر ایجاد گردد . البته بنده کد مورد نظر را نوشته ام فقط یک مشکل دارد و آن اینکه اولین شماره در اول هر سال مورد نظر را نمی تواند ایجاد کند و برنامه خطا می دهد . لطفا اگر متوجه شده اید راهنمایی کنید
با تشکر


var
a:String;
begin
a:=Copy(MainForm.EDYear.Text,3,2)+'0001';
TFactorMain.Insert;
EDFactCode.SetFocus;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT MAX(FactCode) as FMax FROM FactorMain Where DYear='+
QuotedStr(MainForm.EDYear.Text) + '');
Open;
FCode.DataField:='FMax';
if AdoQuery1.RecordCount>0 then
EDFactCode.Text:=inttostr(strtoint(FCode.Text)+1)
else if AdoQuery1.RecordCount=0 then
EDFactCode.Text:=a;
EDDYear.Text:=MainForm.EDYear.Text;
end;
//FCode:=strtoint(FcCod.Text)+1;
//EDFactCode.Text:=inttostr(FCode);
end;

ghabil
پنج شنبه 16 فروردین 1386, 00:53 صبح
این خط رو عوض کن


EDFactCode.Text:=inttostr(strtoint(FCode.Text)+1)

به :


EDFactCode.Text:=inttostr(Fields[0].AsInteger + 1)


ولی این کارت وقتی چند نفر همزمان کار کنند ممکنه کد تکراری بسازه ها.

مجتبی جوادی
پنج شنبه 16 فروردین 1386, 08:14 صبح
آقای ghabil با تشکر از لطف شما ولی مشکل من زمانی رخ می دهد که در جدول FactorMain هیچ رکوردی وجود ندارد یا به عبارت دیگر در سال جدید اولین رکورد با اولین کد را به خود اختصاص دهد ولی پیغام خطا می دهد اما وقتی اولین کد را خودم دستس وارد می کنم کدهای بهدی را اتوماتیک ایجاد می کند . مشکل زمای پیش می آید که شرط If AdoQuery1.RecordCount=0 then
برقرار می شود
با تشکر

ghabil
پنج شنبه 16 فروردین 1386, 22:55 عصر
خطایی که میگری چی هست ؟

مجتبی جوادی
شنبه 18 فروردین 1386, 01:11 صبح
با تشکر از لطف شما آقای کوشا
خطای زیر را میدهد

'' is not a valid integer value.

ghabil
شنبه 18 فروردین 1386, 10:42 صبح
دقیقا روی کدوم خط این خطا رو میگیری. ببین هرجا از FCode.Text استفاده کردی اگر بجاش بکنی Fields[0].AsInteger درست میشه. دلیلش هم اینه که وقتی Text یک فیلد خالی رو میگیری بهت '' بر میگردونه که عدد نیست اما اگر AsInteger بگیریش بهت صفر برمیگردونه که خب درسته .

مجتبی جوادی
شنبه 18 فروردین 1386, 23:41 عصر
آقای کوشا باز هم روی خط زیر همان خطا را می دهد

EDFactCode.Text:=inttostr(Fields[0].AsInteger + 1)

ghabil
یک شنبه 19 فروردین 1386, 01:33 صبح
تضمینی


if Fields[0].IsNull then
EdfactCode.Text:= '1'
else
EDFactCode.Text:=inttostr(Fields[0].AsInteger + 1)

Valadi
یک شنبه 19 فروردین 1386, 07:35 صبح
این هم یک کد:

Table1.Fields[0].asinteger:=Table1.RecordCount+1

ghabil
یک شنبه 19 فروردین 1386, 11:05 صبح
این هم یک کد:

Table1.Fields[0].asinteger:=Table1.RecordCount+1

این کد همیشه درست جواب نمیده ، مثلا فرض کن چندتا رکورد پاک شده باشند اونوقت مثلا بیشترین شماره 100 هست در حالی که مثلا تعداد رکوردها 90 و شماره جدید شما 91 میشه که تکراریه.