PDA

View Full Version : درج Id زمانه انتقال رکوردهایی از یه جدول به جدول دیگر



mina_148m
جمعه 05 بهمن 1386, 03:16 صبح
سلام،
من میخوام یکسری از اطلاعاتم زمانی که به یه جدوله دیگه انتقال
داده می شه وهر موقع که این کارو با دستور insert into انجام می دم میخوام شمارشه id از اول باشه یعنی از 1 شروع بشه ولی نمی دونم این قسمتشو چه جوری بنویسم
اینم دستوره insert ام



ADOQuery1.SQL.Clear;
adoquery1.SQL.text:='insert into bank_table (Name,Famili,AccountNum,FinalMoney) ';
adoquery1.sql.add('Select esm , Famili,accountnum,finalmoney ');
adoquery1.sql.add('From Tablemoney ');
ADOQuery1.ExecSQL;
ADOQuery1.Close;


خیلی خیلی ممنون می شم کمکم کنید باید چیکار کنم

SYNDROME
جمعه 05 بهمن 1386, 08:53 صبح
یعنی می خواهید یک شماره ردیف ایجاد کنید.
البته فکر کنم بانکتان Access است.
یکی از راه ها این است که بعد از اضافه کردن با استفاده از یک Loop مقدار دهی کنید.رکوردها را یکی یکی مقدار 1 تا N بدهید.
موفق باشید

mina_148m
جمعه 05 بهمن 1386, 11:57 صبح
سلام،

یعنی می خواهید یک شماره ردیف ایجاد کنید
بله می خوام هرسر ی که اطلاعات تو جدوله accsss می ریزم شمارشه رکوردهام از1شروع بشه چون اخرسر تو برنامم من مجبورم اطلاعاتو پاک کنم می خوام هر سری از اول ایجاد بشه
من فکر می کردم راهی به غیر از loop باشه؟
حالا من اینجوری نوشتم ولی درست ثبت نمی شه
باید برنامرو یبار ببندم دوباره فقط این قسمن یعنی نوشتن id رو یباره دیگه انجام بدم تا عدد ثبت بشه ولی عددی که میده 38 38 اشتباه می ده
همون زمانی که ثبت اطلاعات و می خوام با یه دگمه دیگه هم id چاپ بشه نمی شه
اینم کدش



var
r:array of integer;
i,j,n:integer;
begin
datamodule1.adobank.Active :=true;
datamodule1.adobank.Open;
datamodule1.adobank.First ;
n:=datamodule1.DataSource6.DataSet.RecordCount ;
setlength(r,n);
for i:=0 to n-1 do
r[i]:= i+1;
for j:= 1 to n do
begin
datamodule1.adobank.Edit ;
datamodule1.adobank.FieldByName ('ID').asinteger:=r[i];
datamodule1.adobank.post ;
datamodule1.adobank.next;
end;
datamodule1.adobank.close ;
end;


با تشکر فراوان

scorpion_man
جمعه 05 بهمن 1386, 16:05 عصر
سلام
اگه میخواهید اطلاعاتتون به صورت موقتی به یه db جدید انتقال بدید و هیچ ارتباطی بین این جدول و جدول base نخواهد بود چون وقتی دارید ردیفها رو تغییر میدید دیگه نمیتونید base اون record رو پیدا کنید مگر اینکه ستون جدید فقط به عنوان یه ردیف در نظر بگیرید و id رکوردها تو یه ستون دیگه با همون مقدار قبلیش باقی بمونه
خوب میتونید تو اون ستون جدید یه auto increment تعریف کنید که با هر بار اضافه کردن یه رکورد از db قبلی تو db جدید خودش ردیف ها رو از هرجایی که میخواهید شروع کرده و مرتب بره بالا
موفق باشید

SYNDROME
جمعه 05 بهمن 1386, 16:10 عصر
منظورم چنین چیزی بود.


ADO.First;
While Not ADO.EOF DO
Begin
ADO.Edit;
ADO.FieldByName('ID').Asinteger := ADO.RecNo;
ADO.Post;
ADO.Next;
End;

موفق باشید

mina_148m
جمعه 05 بهمن 1386, 18:37 عصر
سلام،

خوب میتونید تو اون ستون جدید یه auto increment تعریف کنید که با هر بار اضافه کردن یه رکورد از db قبلی تو db جدید خودش ردیف ها رو از هرجایی که میخواهید شروع کرده و مرتب بره بالا
از راهنمایی تون ممنونم
من این کارو کردم ولی وتی که باید جدول اطلاعاتش پاک بشه
ودفعه بعد که باید یه اطلاعات دیگه ثبت بشه autonumber از شماره اخرین رکوردی که توش بوده شروع به ثبت می کنه
ولی من می خوام از دوباره از 1 شروع بشه
اقای syndrome از کمکتون خیلی ممنونم ولی این دستور هم چیزی تو id ثبت نکرد:ناراحت::ناراحت:



خیلی ممنون

scorpion_man
جمعه 05 بهمن 1386, 22:57 عصر
سلام،

از راهنمایی تون ممنونم
من این کارو کردم ولی وتی که باید جدول اطلاعاتش پاک بشه
ودفعه بعد که باید یه اطلاعات دیگه ثبت بشه autonumber از شماره اخرین رکوردی که توش بوده شروع به ثبت می کنه
ولی من می خوام از دوباره از 1 شروع بشه
اقای syndrome از کمکتون خیلی ممنونم ولی این دستور هم چیزی تو id ثبت نکرد:ناراحت::ناراحت:
خیلی ممنون
اطلاعات auto increment تو مشخصات database ذخیره میشه برا اینکه این اتفاق نیفته باید هر بار یه db جدید بسازید البته با کدهای sql یا ممکنه راهی هم باشه برا reset کردن database بهترین راه همینه هم راحته هم زود نتیجه میده
موفق باشید

SYNDROME
شنبه 06 بهمن 1386, 08:51 صبح
ولی این دستور هم چیزی تو id ثبت نکرد:

دوست عزیز کد بالا به ترتیب شماره رکوردها را در ID ثبت می کند.
چک کنید و ببینید چه مقداری در ID ریخته می شود.
بعد از عمل Insert این ADO را به جدول مورد نظر وصل کنید و آن را Close و Open کنید تا رکوردها در این DataSet ریخته شود و سپس کد فوق را اجرا کنید.
از یک Beak Point استفاده کنید و ببینید چه اتفاقی می افتد.
موفق باشید

mina_148m
شنبه 06 بهمن 1386, 10:37 صبح
سلام،
من واقعا از توجه و کمکتون خیلی ممنونم

کد بالا به ترتیب شماره رکوردها را در ID ثبت می کند.
من اینو می دونم -مشکله منم اصلن همینه
دقیقن همه نکاتی که گفتید رو انجام دادم ولی نمی شه
یعنی هیچ مقداری تو id ثبت نمی شه
اینم دقیقن اون کدی که من نوشتم



begin


ADOQuery1.SQL.Clear;
adoquery1.SQL.text:='insert into bank_table (Name,Famili,AccountNum,FinalMoney) ';
adoquery1.sql.add('Select esm , Famili,accountnum,finalmoney ');
adoquery1.sql.add('From Tablemoney ');
ADOQuery1.ExecSQL;
ADOQuery1.Close;


datamodule1.ADObank.First;
While Not datamodule1.ADObank.EOF DO
Begin
datamodule1.ADObank.Edit;
datamodule1.ADObank.FieldByName('ID').Asinteger := datamodule1.ADObank.RecNo;
datamodule1.ADObank.Post;
datamodule1.ADObank.Next;
End;
datamodule1.ADObank.Open;
end;


آن را Close و Open کنید
اگه منظورتون همین کدی که بالا هست میگه که نمی تونم رو dataset بسته کارکنم
وقتی هم بعد از حلقه close و بعد open می نویسم خطا می ده
key column information is sufficent

خیلی خیلی مممنونم

SYNDROME
شنبه 06 بهمن 1386, 11:26 صبح
قبل از کد زیر


datamodule1.ADObank.First;

دستور زیر را بنویسید.


datamodule1.ADObank.Close;
datamodule1.ADObank.Opne;

دقت کنید شما زمانی که عمل Insert را انجام داده اید مستقیم بدون به روز رسانی datamodule1.ADObank می خواهید اطلاعات را مقدار دهی کنید که مثلا مقدار قبلی در آن وجود دارد و با مقدار جدید یکی نیست.
موفق باشید

mina_148m
شنبه 06 بهمن 1386, 13:24 عصر
سلام،
اقای syndrome من از لطف و کمکتون خیلی خیلی ممنونم
بله درست شد

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