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

Тема в разделе "Delphi - Базы данных", создана пользователем Ягодка, 15 фев 2013.

  1. Ягодка

    Ягодка Member

    Регистрация:
    11 фев 2013
    Сообщения:
    6
    Симпатии:
    0
    Добрый вечер, уважаемые форумчане! :lovecodeby:
    У меня есть БД (создана в MS Access), схема данных которой изображена на рисунке "bd.jpg". bd.jpg
    Там есть таблицы "Поставщики", "Ремонт", "Оборудование". Эти таблицы самые важные) Мне необходимо заполнить таблицу StringGrid следующими данными: "№ поставщика", "Наименование поставщика", "Общее количество техники", "Общая продолжительность гарантии", "Общая стоимость ремонта". Но поставщики-то у меня есть хорошие и нехорошие
    Хорошие поставщики не входят в таблицу "Ремонт" моей БД, а нехорошие-в неё заносятся. Проблема в том, что тем поставщикам, кто не входит в таблицу "Ремонт", нужно в поле "Общая стоимость ремонта" в StringGrid-е присвоить значение "0" (они же хорошие и мы не потратили на ремонт их техники наши денежки )
    Я смогла сделать следующее - это изображено на скрине моего приложения "exe.jpg": exe.jpg
    Отбираются поставщики, чьё оборудование сломалось, и сумма затраченных на ремонт денег.
    Это делается с помощью текста запроса:
    Код (Delphi):
    Select
    [Поставщик].[№ поставщика], [Поставщик.Наименование поставщика],
    sum ([Ремонт].[Стоимость]) as [Общая стоимость ремонта]
    from [Оборудование], [Поставщик], [Ремонт]
    where [Оборудование].[№ серийный]=[Ремонт].[№ серийный]
    and [Поставщик].[№ поставщика]=[Оборудование].[№ поставщика]
    group by [Поставщик].[№ поставщика],
    [Поставщик].[Наименование поставщика]
    Отбираются поставщики, чьё оборудование не сломалось.
    Это делается с помощью текста запроса:
    Код (Delphi):
    Select [Оборудование].[№ серийный], [Оборудование].[Наименование],
    [Оборудование].[Количество], [Оборудование].[Стоимость],
    [Оборудование].[Продолжительность гарантии],
    [Поставщик].[№ поставщика], [Поставщик.Наименование поставщика]
    from [Оборудование], [Поставщик]
    where [№ серийный] not in (Select [№ серийный] from [Ремонт])
    and [Поставщик].[№ поставщика]=[Оборудование].[№ поставщика]
    order by [Поставщик].[№ поставщика]
    Отбираются все поставщики и общее количество техники и общая продолжительность гарантии, которую они нам предоставили.
    Это делается с помощью текста запроса:
    Код (Delphi):
    select [Поставщик].[№ поставщика],
    [Поставщик].[Наименование поставщика],
    sum([Оборудование].[Количество]) as [Общее количество],
    sum ([Оборудование].[Продолжительность гарантии]) as [Общая гарантия]
    from [Оборудование], [Поставщик]
    where [Поставщик].[№ поставщика]=[Оборудование].[№ поставщика]
    group by [Поставщик].[№ поставщика],
    [Поставщик].[Наименование поставщика]
    В StringGrid я сумела занести только "№ поставщика", "Наименование поставщика", "Общее количество техники", "Общая продолжительность гарантии", с помощью вот этого кода:
    Код (Delphi):
    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: Если я сегодня вам не отвечаю в теме - это не значит что я про вас забыла, просто скоро уйду от компа-важные дела :( Если нужен будет проект - выложу!
     
  2. AndreyS

    AndreyS Active Member

    Регистрация:
    15 окт 2007
    Сообщения:
    39
    Симпатии:
    0
    Если я правильно понял то тебе надо

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

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

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

    =====

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

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

Поделиться этой страницей