PDA

View Full Version : چند سطر از دی بی گرید



parniant
پنج شنبه 23 آبان 1387, 21:32 عصر
با سلام
من تو برنامم مجبورم در حین ثبت اطلاعات (که از ado stored procedure ) استفاده می کنم برای ثبت اطلاعات از دو adoquery استفاده کنم که هر کدام بخشی از اطلاعات موجود در جدول جدیدم را تشکلیل می دهند و بخشهایی از این دو جدول در جدول سوم مورد نظرم ثبت شوند و البته اطلاعات موردنظرم در دی بی گرید وجود داره که می خوام ببینم می تونم اطلاعات رو از دی بی گرید در جدول بریزم (البته بگم که اطلاعاتم در چند سطر دی بی گرید وجود داره ) که با استفاده از دستورات زیر فقط یک سطر رو می شه در جدولم ثبت کرد یا اگه در oncellclick رو بزنیم فقط اون سطر رو می تونیم بریزیم نه چند تا سطر رو

adostoredproc3.Parameters [5].Value :=DBGrid1.Columns.Items[0].Field.AsString;
adostoredproc3.Parameters [6].Value :=DBGrid1.Columns.Items[1].Field.AsString;
adostoredproc3.Parameters [7].Value :=DBGrid1.Columns.Items[2].Field.AsString;

tefos666
پنج شنبه 23 آبان 1387, 22:57 عصر
دوست عزیز - هرچند خوب متوجه منظورت نشدم ولی خوب این کدی که زدی مطمئنا سطر اول رو برمیگردونه شما میتونی یک for بزنی از اول گرید تا record_count گرید و بعد یک next بزار به همین سادگی میتونی کل گرید رو بخونی و دونه دونه جلو بری و بعد از هر next عملیات ثبت یا همون کدی که بالا نوشتی رو بزار البته میتونی قبلش بگی اگه record_count بزرگتر از صفر بود حلقه اجرا بشه وگرنه رکوردی توش نیست و پیام بدی - اگه شما هم توضیح بیشتر بدی یا کدت رو آپلود کنی اینجا مطمئنا جواب سوالت رو بهتر میگیری . :خجالت: راستی میتونی از while not eof هم استفاده کنی به صورت زیر :





procedure TForm9.Button2Click(Sender: TObject);
var
i:integer;
begin
if DBGrid1.DataSource.DataSet.RecordCount >0 then
begin
while not DBGrid1.DataSource.DataSet.Eof do
begin
DM.dsmahsol.DataSet['name']:=DBGrid1.Columns.Items[0].Field;
end;
DBGrid1.DataSource.DataSet.Next;
end
else
begin
ShowMessage('هیچ رکوردی یافت نشد');
end;
end;

end.


به این ترتیب دیتاسورس رو اگه یه طناب فرض کنیم از اول طناب شروع کردیم و تا زمانی که به انتهاش نرسیدیم دونه دونه ثبت کردیم و به آخر رفتیم .
کمکی بود در خدمتم

parniant
جمعه 24 آبان 1387, 08:06 صبح
با سلام می شه بگید الان در این دستوری که شما گفتید شمارنده برای سطرها کجا بذارم ممنون می شم

DBGrid1.Columns.Items[0].Field
آخه items[0] شماره فیلد است من شماره سطر را می خوام در حقیقت از همان حلقه for می خوام استفاده کنم

tefos666
جمعه 24 آبان 1387, 12:29 عصر
دوست عزیز شما اولا باید value فیلدت رو برگردونی نه اسم فیلد دوما همونطوری که نوشتم


DM.dsmahsol.DataSet['name']:=DBGrid1.Columns.Items[0].Field;


به این ترتیب اگه 100 تا فیلد دیگه هم داشتی مینویسی و مقدارش رو برمیگردونی
الان اگه جدولی به نام محصول داشته باشی فیلد نامش مقدار فیلد 0 گریدت رو میگیره
دستور while رو که زدم چرا می خواهی از for استفاده کنی ؟

حالا من کار ندارم چرا ، ولی از این میتونی برای next استفاده کنی



DBGrid1.DataSource.DataSet.Next;


جاش هم مشخصه دیگه بعد از end در for البته میتونی یک متغیر هم تعریف کنی و اول Record_count گرید رو توش بریزی و هربار یکی بهش اضافه کنی مثل یک ظرف و توی حلقه for هربار عمل compare یا مقایسه رو انجام بدی اگه متغیرت از record_count کوچکتر بود next بشه :لبخند: