![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Код:
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;Помогите пожалуйста в этом разобраться. |
|
#2
|
||||
|
||||
|
Цитата:
Исходя из этого тебе нужно создать свой набор данных (например TClientDataSet) в который ты будешь добавлять нужные тебе записи и его привязать к TDBGrid. |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Ludo (22.05.2013)
| ||
|
#3
|
|||
|
|||
|
Понятно
Цитата:
|
|
#4
|
||||
|
||||
|
Надо: AdoCommand, запрос типа "insert into TABLE_nAME (FIELD1, FIELD2, ..., FIELDn) values(VAL1, VAL2, ..., VALn)"
|
|
#5
|
||||
|
||||
|
Цитата:
Бросаешь на форму этот компонент (или создаёшь программно) настраиваешь в нём нужные поля (тоже можно программно) и добавляешь в него сколько угодно записей так же как и в любой другой 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
|
|||
|
|||
|
Цитата:
А на какой вкладке у Вас TClientDataSet? |
|
#7
|
||||
|
||||
|
Цитата:
А вообще в Delphi можно добавлять компоненты даже не зная на какой вкладке они находятся. В старых Delphi Меню->View->Component List. В новых Delphi строка поиска прямо в палитре компонентов. |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Ludo (22.05.2013)
| ||
|
#8
|
||||
|
||||
|
Как-то некрасиво как-то через Аппенд и Пост делать по моему.
|
|
#9
|
||||
|
||||
|
Цитата:
|
|
#10
|
||||
|
||||
|
Дак а через ADOCommand и повторным вычитыванием данных?
|
|
#11
|
|||
|
|||
|
Цитата:
А какие поля нужно настроить и с чем связывать? Извините за такие глупые вопросы... |
|
#12
|
||||
|
||||
|
Цитата:
|
|
#13
|
|||
|
|||
|
Код:
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. И видимо это неправильно, раз данные не получены... |