Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2013, 07:16
Ludo Ludo вне форума
Прохожий
 
Регистрация: 14.05.2013
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
Сообщение Добавление в dbgrid

Код:
var mas: array of integer;
          i: integer;
begin
   DataModule1.StoredProc.Close;
    DataModule1.StoredProc.ProcedureName:='SelectNomKey';
    DataModule1.StoredProc.Parameters.Clear;
    DataModule1.StoredProc.Parameters.Refresh;
    DataModule1.StoredProc.Parameters.ParamByName('@name_key').Value:=FormMain.EditPoiskKey.Text;
    DataModule1.StoredProc.ExecProc;
    DataModule1.StoredProc.Active:=True;
    DataModule1.StoredProc.First;
    if (DataModule1.StoredProc.RecordCount>0) then
        SetLength(mas,DataModule1.StoredProc.RecordCount);
 
//по названию ключевого_поля выбираю все коды этих полей и помещаю в дин. массив
 
    for i:=0 to DataModule1.StoredProc.RecordCount-1 do
      begin
        mas[i]:=DataModule1.StoredProc.FieldValues['nom_key'];
        DataModule1.StoredProc.Next;
      end;
 
//все номера (может быть несколько) записываю в массив, после чего по этим кодам ключ. слов ищу документы
 
    for i:=0 to length(mas)-1 do
    begin
      DataModule1.StoredProc.Close;
      DataModule1.StoredProc.ProcedureName:='PoiskNomKey';
      DataModule1.StoredProc.Parameters.Clear;
      DataModule1.StoredProc.Parameters.Refresh;
      DataModule1.StoredProc.Parameters.ParamByName('@nom_key').Value:=mas[i];
      DataModule1.StoredProc.ExecProc;
      DataModule1.StoredProc.Active:=True;
      DataModule1.StoredProc.First;
     FormMain.GridRezPoisk.DataSource.DataSet.FieldByName('nom_doc_com').AsString;
      DataModule1.StoredProc.Next;
    end;
    finalize(mas);
end;
У меня, в dbgrid записывается последняя запись, т.е. как первая нужная запись находится она отображается в dbgrid, если находится вторая, то она заполняется вместо первой... а мне нужно чтобы все записи попадали. Можно ли сделать, чтобы записи добавлялись и все отображались в dbgrid'e, а не последняя найденная..?
Помогите пожалуйста в этом разобраться.
Изображения
Тип файла: jpg Безымянный.jpg (19.7 Кбайт, 5 просмотров)
Ответить с цитированием
  #2  
Старый 22.05.2013, 10:00
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Ludo
У меня, в dbgrid записывается последняя запись, т.е. как первая нужная запись находится она отображается в dbgrid, если находится вторая, то она заполняется вместо первой... а мне нужно чтобы все записи попадали. Можно ли сделать, чтобы записи добавлялись и все отображались в dbgrid'e, а не последняя найденная..?
Ты не можешь добавлять записи в TDBGrid по той простой причине, что он сам никаких записей в себе не хранит. TDBGrid умеет только отображать "чужой" набор данных - в твоём случае это вероятно те записи которые содержатся в StoredProc.
Исходя из этого тебе нужно создать свой набор данных (например TClientDataSet) в который ты будешь добавлять нужные тебе записи и его привязать к TDBGrid.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Ludo (22.05.2013)
  #3  
Старый 22.05.2013, 11:02
Ludo Ludo вне форума
Прохожий
 
Регистрация: 14.05.2013
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Понятно
Цитата:
Сообщение от poli-smen
Ты не можешь добавлять записи в TDBGrid по той простой причине, что он сам никаких записей в себе не хранит. TDBGrid умеет только отображать "чужой" набор данных - в твоём случае это вероятно те записи которые содержатся в StoredProc.
Исходя из этого тебе нужно создать свой набор данных (например TClientDataSet) в который ты будешь добавлять нужные тебе записи и его привязать к TDBGrid.
А вы можете на моем примере это показать. Я совсем новичок в этом...
Ответить с цитированием
  #4  
Старый 22.05.2013, 11:22
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Надо: AdoCommand, запрос типа "insert into TABLE_nAME (FIELD1, FIELD2, ..., FIELDn) values(VAL1, VAL2, ..., VALn)"
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 22.05.2013, 12:09
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Ludo
Понятно
А вы можете на моем примере это показать. Я совсем новичок в этом...
А что ж там показывать? Показать как работать с TClientDataSet?
Бросаешь на форму этот компонент (или создаёшь программно) настраиваешь в нём нужные поля (тоже можно программно) и добавляешь в него сколько угодно записей так же как и в любой другой DataSet:
Код:
  ClientDataSet1.Append; // Добавить новую запись
  ClientDataSet1.FieldByName('Имя поля 1').AsString := 'Какая-то строка';
  ClientDataSet1.FieldByName('Имя поля 2').AsString := 'Какая-то строка';
  ClientDataSet1.FieldByName('Имя поля 3').AsInteger := 123456789;
  ClientDataSet1.Post; // Сохранить запись
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Ludo (22.05.2013)
  #6  
Старый 22.05.2013, 12:13
Ludo Ludo вне форума
Прохожий
 
Регистрация: 14.05.2013
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
А что ж там показывать? Показать как работать с TClientDataSet?
Бросаешь на форму этот компонент (или создаёшь программно) настраиваешь в нём нужные поля (тоже можно программно) и добавляешь в него сколько угодно записей так же как и в любой другой DataSet:
Код:
  ClientDataSet1.Append; // Добавить новую запись
  ClientDataSet1.FieldByName('Имя поля 1').AsString := 'Какая-то строка';
  ClientDataSet1.FieldByName('Имя поля 2').AsString := 'Какая-то строка';
  ClientDataSet1.FieldByName('Имя поля 3').AsInteger := 123456789;
  ClientDataSet1.Post; // Сохранить запись

А на какой вкладке у Вас TClientDataSet?
Ответить с цитированием
  #7  
Старый 22.05.2013, 12:19
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Ludo
А на какой вкладке у Вас TClientDataSet?
Вкладка "Data Access"
А вообще в Delphi можно добавлять компоненты даже не зная на какой вкладке они находятся. В старых Delphi Меню->View->Component List. В новых Delphi строка поиска прямо в палитре компонентов.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Ludo (22.05.2013)
  #8  
Старый 22.05.2013, 12:30
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Как-то некрасиво как-то через Аппенд и Пост делать по моему.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 22.05.2013, 12:32
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Как-то некрасиво как-то через Аппенд и Пост делать по моему.
К сожалению TClientDataSet не поддерживает SQL-запросы.
Ответить с цитированием
  #10  
Старый 22.05.2013, 13:01
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Дак а через ADOCommand и повторным вычитыванием данных?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #11  
Старый 22.05.2013, 18:13
Ludo Ludo вне форума
Прохожий
 
Регистрация: 14.05.2013
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
А что ж там показывать? Показать как работать с TClientDataSet?
Бросаешь на форму этот компонент (или создаёшь программно) настраиваешь в нём нужные поля (тоже можно программно) и добавляешь в него сколько угодно записей так же как и в любой другой DataSet:
Код:
  ClientDataSet1.Append; // Добавить новую запись
  ClientDataSet1.FieldByName('Имя поля 1').AsString := 'Какая-то строка';
  ClientDataSet1.FieldByName('Имя поля 2').AsString := 'Какая-то строка';
  ClientDataSet1.FieldByName('Имя поля 3').AsInteger := 123456789;
  ClientDataSet1.Post; // Сохранить запись

А какие поля нужно настроить и с чем связывать? Извините за такие глупые вопросы...
Ответить с цитированием
  #12  
Старый 23.05.2013, 12:32
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Ludo
А какие поля нужно настроить и с чем связывать? Извините за такие глупые вопросы...
Настраивать нужно естественно те поля, которые должны отображаться в TDBGrid, а данные для них получать из StoredProc.
Ответить с цитированием
  #13  
Старый 24.05.2013, 10:51
Ludo Ludo вне форума
Прохожий
 
Регистрация: 14.05.2013
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Код:
for i:=0 to length(mas)-1 do
    begin
      DataModule1.StoredProc.Close;
      DataModule1.StoredProc.ProcedureName:='PoiskNomDoc';
      DataModule1.StoredProc.Parameters.Clear;
      DataModule1.StoredProc.Parameters.Refresh;
      DataModule1.StoredProc.Parameters.ParamByName('@nom_doc').Value:=mas[i];
      DataModule1.StoredProc.ExecProc;
      
      DataModule1.ClientDataSet.Active:=true;
      DataModule1.ClientDataSet.Append; 
      DataModule1.ClientDataSet.FieldByName('nom_doc_com').AsInteger := DataModule1.StoredProc.FieldValues['nom_doc_com'];
      DataModule1.ClientDataSet.FieldByName('nom_doc_priv').AsInteger := DataModule1.StoredProc.FieldValues['nom_doc_priv'];
      DataModule1.ClientDataSet.FieldByName('dat_beg').AsDateTime := DataModule1.StoredProc.FieldValues['dat_beg'];
      DataModule1.ClientDataSet.FieldByName('dat_end').AsDateTime := DataModule1.StoredProc.FieldValues['dat_end'];
      DataModule1.ClientDataSet.FieldByName('nom_scan').AsInteger := DataModule1.StoredProc.FieldValues['nom_scan'];
      DataModule1.ClientDataSet.Post; 
    end;
    FormMain.GridRezPoisk.DataSource.DataSet.Open;

Ошибка: Отсутствуют данные поставщика.

ClientDataSet связала с DataSource через MasterSource, а DataSource c StoredProc.
И видимо это неправильно, раз данные не получены...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter