View Full Version : تکه تکه خواندن از DBGrid
Mojgan110
چهارشنبه 15 شهریور 1385, 08:33 صبح
با سلام و خسته نباشید خدمت بخش دلفی.
یک DBGridدارم که میخوام رکوردهایش را ( مثلا 5 تا 5 تا ) بخوانم و به یک گرید_ دیگر کپی دهم .
از ADO هم استفاده کرده ام ....... فیلدی مثل شماره رکورد هم در اختیار ندارم
حالا چطور عمل کنم ؟
خیلی ممنون
Mahyaa
چهارشنبه 15 شهریور 1385, 09:14 صبح
سلام :)
چرا 5 تا 5 تا ؟! علت خاصی داره ؟
اگه بخواهید تک تک بخونید ، می تونید از RecordCount دیتاست اون گرید مبدا استفاده کنید .
مثلا یک چیزی شبیه این :
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
Cnt : Integer;
begin
Cnt := DBGrid1.DataSource.DataSet.RecordCount;
if Cnt > 0 then
DBGrid1.DataSource.DataSet.First;
for I:=0 to Cnt - 1 do
begin
CopyGridRecord(DBGrid1.DataSource.DataSet , DestinDataSet);
//write this procedure to read from source dataset and append to destination dataset
DBGrid1.DataSource.DataSet.Next;
end;
end;
Mojgan110
چهارشنبه 15 شهریور 1385, 12:25 عصر
ببخشید نوشته بودید CopyGridRecord
این چیه ؟ نداریم انگار همچین چیزی ...
Mahyaa
چهارشنبه 15 شهریور 1385, 13:01 عصر
منظورم این بود که توی این Procedure کار کپی رکورد رو انجام بدید .
یعنی اگر گرید مقصد هم DBGrid باشه (که فکر کنم همینطوره ) به نظرم باید رکوردها رو تو یک DataSet دیگه که به گرید مقصد وصله کپی کنید .
توی این Procedure شما باید Dataset مبدا رو که در حالت Browse هست بخونید و مقادیر رو به مقصد Append کنید .
یک چیزی شبیه این :
begin
if (DataSetSource.State = dsBrowse) And (DataSetDestination.State = dsBrowse) then
begin
DataSetDestination.Append;
DataSetDestination.FieldByName('Field1').Asinteger := DataSetSource.FieldByName('Field1').Asinteger;
DataSetDestination.FieldByName('Field2').AsString := DataSetSource.FieldByName('Field2').AsString;
DataSetDestination.FieldByName('Field3').Asinteger := DataSetSource.FieldByName('Field3').Asinteger;
DataSetDestination.Post;
end;
end;
با توجه به اینکه در Procedure قبل از اون ما رکوردهای DataSet مبدا رو Navigate می کنیم ، رکورد جاری به DataSet دیگه کپی میشه
--------------------
در پست شماره 2 باید تو حلقه for این رو هم اضافه میکردیم که اصلاحش کردم :
[code]
DBGrid1.DataSource.DataSet.Next;
[Code/]
Mahyaa
چهارشنبه 15 شهریور 1385, 13:11 عصر
البته من نمیدونم شما دقیقا میخواهید چه کار کنید و چرا میخواهید دیتا یک گرید رو به دیگری کپی کنید ولی اگر هر دو تا Dataset متعلق به یک Database باشند ، این کار درستی به نظر نمیرسه !
ایمان دوستی
سه شنبه 21 شهریور 1385, 12:09 عصر
سلام من یه راح حل برای شما دارم البته نمیدونم چرا دوست دارید 5 تا 5 تا رکورد رو بریزید ولی در هر صورت میتونید از یه آرایه که شامل رکورد های بانک اطلاعاتی شما هست استفاده کنید که این آرایه 5 تا خونه داشته باشه بعد 5 تا رکورد بخونین و بریزین تو آرایه بعد از تو آرایه بخونین بریزین تو جدول دیگتون اگه کدشو خواستین برام ایمیل بزنین
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.