PDA

View Full Version : DBGRID



شفیعی
چهارشنبه 04 خرداد 1384, 22:43 عصر
سلام
آیا این امکان وجود دارد که چند TABLE را در یک DBGRID نمایش داد سه تا TABLE داریم که 4 فیلد مشترک دارند می خواهیم در قسمتی از برنامه این 4 فیلد مربوط به این 3 جدول را پشت سرهم لیست کنیم

vcldeveloper
پنج شنبه 05 خرداد 1384, 02:24 صبح
آقای شفیعی، لطفا عنوان درست برای این تاپیک پیدا کنید! ---> عضو شده در: 1 اردیبهشت 1382

vcldeveloper
پنج شنبه 05 خرداد 1384, 03:31 صبح
آیا این امکان وجود دارد که چند TABLE را در یک DBGRID نمایش داد سه تا TABLE داریم که 4 فیلد مشترک دارند می خواهیم در قسمتی از برنامه این 4 فیلد مربوط به این 3 جدول را پشت سرهم لیست کنیم
می تونید از TQrSubDetail استفاده کنید.

javidtaheri
پنج شنبه 05 خرداد 1384, 08:07 صبح
از کوری استفاده کن و با دستورات sql فیلد های لازم را select کن بعد در dbgrid نمایش بده

Ali_Hashemi
پنج شنبه 05 خرداد 1384, 08:52 صبح
سلام




Query1.SQL.Clear;
Query1.SQL.Add('select * from "table1.db"')
Query1.SQL.Add('union all')
Query1.SQL.Add('select * from "table2.db"')
Query1.SQL.Add('union all')
Query1.SQL.Add('select * from "table3.db"')
Query1.SQL.Add('union all')
Query1.SQL.Add('select * from "table4.db"')
Query1.Open;



::نوشتن::

babak_delphi
پنج شنبه 05 خرداد 1384, 16:58 عصر
یک راه دیگش هم اینه


select table1.* , table2.* , ... from table1, table2 , ...

شفیعی
جمعه 06 خرداد 1384, 11:12 صبح
سلام
دوستان خسته نباشید با روشی که آقای هاشمی گفتند مشکل حل شد حالا می خواهیم جمع فیلد مبلغ راکه با استفاده از روش آقای هاشمی درست کرده ایم بدست آوریم باید چکار کرد

Ali_Hashemi
جمعه 06 خرداد 1384, 14:38 عصر
سلام آقای شفیعی

فرض می کنیم نام فیلدی که شما میخواهید مجموع اونو حساب کنید مثلا F_Mablagh باشه

به این روش مجموع فیلد مورد نظر بدست میآید :




var sum_mablagh:integer;
....
Query1.sql.text:='Select Sum(F_Mablagh) From "table1.db","Table2.db","Table3.db","Table4.db"'
Query1.open;
sum_mablagh:=Query1.fields[0].asinteger;


مقدار متغیر Sum_Mablagh همون مجموع فیلد مورد نظر شماست.
اگر بخواهیم مجموع رو در همون Select اولی بدست بیاریم نمیشه چون باید از Group By استفاده بشه

شفیعی
جمعه 06 خرداد 1384, 23:27 عصر
سلام
دوست عزیز خیلی ممنون
در مورد جمع باید بگوییم اسم فیلدی که می خواهیم در این 4 تیبل جمع بزنیم یکی نیست
مطلب دیگر اینکه در روش بالا ایا امکان دارد نام تیبلها در یک فیلد قرار گیرد زیرا لازم است بدانیم هر فاکتور فروش مربوط به چه تیبلی است

Ali_Hashemi
شنبه 07 خرداد 1384, 13:49 عصر
فکر میکنم شما باید از دستورات select تو در تو استفاده کنید.

یعنی خروجی دستوری که رکوردها را از 4 جدول بدست میآمد را به جای نام جدول در Query دوم بذاری

یعنی اینکه شما دستور Select جهت بدست آوردن مجموع رو مینویسی اما به جای نام جدول دستور Select دوم رو مینویسی.
نمیدونم چقدر قابل فهم بود .

در مورد اینکه نام جدول در یک فیلد باشد هیچ موردی نداره به راحتی این کار جواب میده اما باید SQL.text رو به صورت داینامیک بسازی با استفاده از نام جدولها که از اون فیلده بدست میاد.

شفیعی
شنبه 07 خرداد 1384, 14:47 عصر
سلام
دوست عزیز اگر ممکن است بیشتر توضیح دهید ویا یک مثال بزنید که بهتر متوجه شوم

Mahdi-563
شنبه 07 خرداد 1384, 21:50 عصر
سلام جاوید جان

آولا از این تخیر چند ماهم معضرت :cry: :cry: !!!!!!!!!

کوری چی ؟؟؟؟ :گیج: :گیج: :گیج:

مهدی بای

Ali_Hashemi
سه شنبه 10 خرداد 1384, 18:39 عصر
سلام آقای شفیعی
ببخشید دیر پاسخ دادم
بد جوری سرم شلوغ بود :oops:

خوب بریم سر اصل مطلب :

شما سه تا جدول دارید (نه چهار تا ! سه تا) با چهار فیلد مشترک که نام فیلد ها یکی نیست.
روش نمایش اون جدول هارو که گفتم. خوب حالا میخواهیم مجموع یکی از اون فیلد ها رو بدست بیاریم
با توجه به اینکه نامهای متفاوت دارن.

راه حل اون در دستورات select تو در تو نهفته است :


فرض میکنیم :
جدول 1 : با فیلد های a1,a2,a3,a4

جدول 2 : با فیلد های : b1,b2,b3

جدول 3 : با فیلد های c1,c2,c3

خوب مثلا میخواهیم مجموع فیلد های a1,b1,c1 رو بدست بیاریم :



SELECT sum(x) FROM

(SELECT a1 AS X FROM table1

UNION ALL

SELECT b1 AS X FROM table2

UNION ALL

SELECT c1 AS X FROM table3)




دستور بالا رو در خاصیت SQL
Query قرار بده اونوقت بعد از Open کردن Query مقدار مورد نیاز شما به این صورت به دست میاد :




My_Sum:=Query1.fields[0].asinteger;






خلاصه اینکه SQL هرگز بر نامه نویس رو تنها نمیذاره. واقعا یکی از بهترین ساخته ها در علم برنامه نویسیه !

من که کوچکترین پروژه ها هم با sql مینویسم.

امیدوارم مشکل شما رفع شده باشه.
موفق باشید.

شفیعی
جمعه 27 خرداد 1384, 19:11 عصر
سلام
دوستان خسته نباشید


Query1.SQL.Clear;
Query1.SQL.Add('select * from "table1.db"')
Query1.SQL.Add('union all')
Query1.SQL.Add('select * from "table2.db"')
Query1.SQL.Add('union all')
Query1.SQL.Add('select * from "table3.db"')
Query1.SQL.Add('union all')
Query1.SQL.Add('select * from "table4.db"')
Query1.Open;

در دستورات بالا کار UNION ALL چیست و اگر در لیست تکراری داشته باشیم آیا نمایش داده می شود یا نه
در عکس پایین اگر دقت کنید خواهید دید که توسط دستورات بالا یک کوئری ساخته شده است و در DBGRID بالا نمایش داده می شود در پایین صفحه 2 DBGRID موجود است که این دو دیبیگرید به 2تا تیبل وصل می باشد و دیبیگرید بالا به کوئری وصل است کوئری باید مجموع اطلاعات موجود در تیبل اول و دوم را نمایش دهد ولی نمایش نمی دهد باید چکار کرد

Ali_Hashemi
شنبه 28 خرداد 1384, 08:26 صبح
سلام

union all - یعنی اجتماع - یعنی اجتماع دو یا چند دستور select با فیلد های مشابه .

اگر کلمه all رو حذف کنی ، رکوردهای تکراری رو نمایش نمیده. در غیر اینصورت همینطور که از اسم اون معلومه
همه رکوردها (تکراری و غیر تکراری) رو نشون میده .

در مورد سوال بعدی شما :


دیبیگرید بالا به کوئری وصل است کوئری باید مجموع اطلاعات موجود در تیبل اول و دوم را نمایش دهد

این اسم طالبی فرشاد از کجا اومده ؟ اون که تو هیچ کدوم از گرید های پایینی نیست ؟ :گیج:


تازه : چون اسم فیلدها با هم فرق دارن تو تیبل های 1 و 2 - شما باید از اسم مستعار جهت نام فیلد ها استفاده کنی . مثلا :



Select Frame as myframe from table1
union all
Select codekala as myframe from table2

این دستور رو برای فیلد های frame و codekala نوشتم که هر دوتاشون در قالب فیلد myframe نمایش داده میشن
و گرید شما هم باید روی همین اسم تنظیم بشه .

برای بقیه فیلد ها هم همینطوری عمل کنید درست میشه :mrgreen:

شفیعی
یک شنبه 29 خرداد 1384, 02:43 صبح
سلام
دوست عزیز عملیات بالا را انجام دادم ولی مشکل حل نشد