Отправить Данные Из Dbgrid В Stringgrid

11.02.2013
6
0
#1
Добрый вечер, уважаемые форумчане! :lovecodeby:
У меня есть БД (создана в MS Access), схема данных которой изображена на рисунке "bd.jpg". bd.jpg
Там есть таблицы "Поставщики", "Ремонт", "Оборудование". Эти таблицы самые важные) Мне необходимо заполнить таблицу StringGrid следующими данными: "№ поставщика", "Наименование поставщика", "Общее количество техники", "Общая продолжительность гарантии", "Общая стоимость ремонта". Но поставщики-то у меня есть хорошие и нехорошие
Хорошие поставщики не входят в таблицу "Ремонт" моей БД, а нехорошие-в неё заносятся. Проблема в том, что тем поставщикам, кто не входит в таблицу "Ремонт", нужно в поле "Общая стоимость ремонта" в StringGrid-е присвоить значение "0" (они же хорошие и мы не потратили на ремонт их техники наши денежки )
Я смогла сделать следующее - это изображено на скрине моего приложения "exe.jpg": exe.jpg
Отбираются поставщики, чьё оборудование сломалось, и сумма затраченных на ремонт денег.
Это делается с помощью текста запроса:
Код:
Select
[Поставщик].[№ поставщика], [Поставщик.Наименование поставщика],
sum ([Ремонт].[Стоимость]) as [Общая стоимость ремонта]
from [Оборудование], [Поставщик], [Ремонт]
where [Оборудование].[№ серийный]=[Ремонт].[№ серийный]
and [Поставщик].[№ поставщика]=[Оборудование].[№ поставщика]
group by [Поставщик].[№ поставщика],
[Поставщик].[Наименование поставщика]
Отбираются поставщики, чьё оборудование не сломалось.
Это делается с помощью текста запроса:
Код:
Select [Оборудование].[№ серийный], [Оборудование].[Наименование],
[Оборудование].[Количество], [Оборудование].[Стоимость],
[Оборудование].[Продолжительность гарантии],
[Поставщик].[№ поставщика], [Поставщик.Наименование поставщика]
from [Оборудование], [Поставщик]
where [№ серийный] not in (Select [№ серийный] from [Ремонт])
and [Поставщик].[№ поставщика]=[Оборудование].[№ поставщика]
order by [Поставщик].[№ поставщика]
Отбираются все поставщики и общее количество техники и общая продолжительность гарантии, которую они нам предоставили.
Это делается с помощью текста запроса:
Код:
select [Поставщик].[№ поставщика],
[Поставщик].[Наименование поставщика],
sum([Оборудование].[Количество]) as [Общее количество],
sum ([Оборудование].[Продолжительность гарантии]) as [Общая гарантия]
from [Оборудование], [Поставщик]
where [Поставщик].[№ поставщика]=[Оборудование].[№ поставщика]
group by [Поставщик].[№ поставщика],
[Поставщик].[Наименование поставщика]
В StringGrid я сумела занести только "№ поставщика", "Наименование поставщика", "Общее количество техники", "Общая продолжительность гарантии", с помощью вот этого кода:
Код:
var
i,j:integer;
begin
j := 1;
DBGrid3.DataSource.DataSet.First;
while not DBGrid3.DataSource.DataSet.Eof do
begin
for i := 0 to DBGrid3.Columns.Count - 1 do
begin
StringGrid1.Cells[i, j] := DBGrid3.DataSource.DataSet.Fields[i].AsString;
end;
Inc(j);
DBGrid3.DataSource.DataSet.Next;
StringGrid1.RowCount:=StringGrid1.RowCount + 1;
end;
StringGrid1.RowCount:=StringGrid1.RowCount -1;
end;
Но как запихнуть последним столбцом в StringGrid поле "Общая стоимость ремонта", да ещё чтоб соответствующим нехорошим поставщикам присваивалась сумма денег, которые мы потратили, ремонтируя их барахло, а хорошим поставщикам-присвоились просто нолики - вот это я не знаю :wha:
Очень рассчитываю на вашу помощь!
П.с.: и кстати, когда жму на кнопку - в StringGrid кроме нужных мне значений почему-то ещё пристраиваются несколько лишних пустых строк :angry2: Как от этого избавиться?
П.п.с.: Всем заранее спасибо за отклики :love: Если я сегодня вам не отвечаю в теме - это не значит что я про вас забыла, просто скоро уйду от компа-важные дела :( Если нужен будет проект - выложу!
 

AndreyS

Active Member
15.10.2007
39
0
34
КИЕВ
#2
Если я правильно понял то тебе надо

1 «Но как запихнуть последним столбцом в StringGrid поле " Общая стоимость ремонта "»

После end; Перед Inc(j);
Добавь

StringGrid1.Cells[i+1, j] := «Общая стоимость ремонта»;

=====

2 чтоб соответствующим нехорошим поставщикам присваивалась сумма денег, которые мы потратили, ремонтируя их барахло, а хорошим поставщикам-присвоились просто нолик

Ну тут 2 способа
1- добавить дополнительный атрибут в табл поставщики и храните в ней всю базу поставщиков, а не только «плохих». Когда будешь отображать данные на форме сделать проверку по атрибуту и ставить уже соответственно либо суму либо «0»
2- Метод перебора
Брать «поставщика» и смотреть если он в табл «нехороших» если да = Сума, нет = «0»