PDA

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 تا رکورد بخونین و بریزین تو آرایه بعد از تو آرایه بخونین بریزین تو جدول دیگتون اگه کدشو خواستین برام ایمیل بزنین