Имя: Пароль:
1C
1С v8
Запрос в Delphi из 1с в DBGrid
0 paulic
 
20.03.12
11:57
Подскажите, пожалуйста, как можно результат запроса полученного в делфях поместить в DBGrid, желательно без цикла, но хотя не принципиально.
Пример кода
procedure TForm1.ButtonClick(Sender: TObject);
var
 Connector,
 Server,
 Query,
 Rslt,
 Choose: OleVariant;
 ConnStr, SQL, ErrorMessage: String;
 i: Integer;
begin
 //Result := True;

 try
   ConnStr := 'File="U:\1с";Usr="";Pwd="";';
   SQL := 'выбрать р.* из РегистрСведений.РегистрацияИзменений как р';

   Connector := CreateOleObject('V82.COMConnector');
   Server := Connector.Connect(ConnStr);
   Query := Server.NewObject('Запрос');
   Query.Text := SQL;
   Rslt := Query.Execute();
   Choose := Rslt.Choose();

   //пример пробежки, но как значения поместить в Dbgrid
   while Choose.Next() do
   begin
     ShowMessage( String(Choose.GUID));
   end;

Спасибо большое заранее!
1 ZanderZ
 
20.03.12
12:02
на сколько я помню DBGrid должен быть связан с источником данных, просто вывести данные в простой грид можно...
2 paulic
 
20.03.12
12:12
1) здесь должна быть связка DBGrid -> DataSource - а вот как раз в DataSource надо как-то запихнуть данные запроса. А вот как не могу найти. С обычной компонентой типа ADOQuery (результаты запросов содержит) все просто в свойствах DataSource.DataSet нужно указать этот ADOQuery, а вот как закинуть в DataSource данные запроса олученные через OLE не пойму.
3 ZanderZ
 
20.03.12
12:14
(2) зачем тебе DDGrid если ты просто данные получаешь для просмотра...
4 Ненавижу 1С
 
гуру
20.03.12
12:15
TDataSource не содержит данных, надо запихивать в свой унаследованный от TDataSet
5 H A D G E H O G s
 
20.03.12
12:16
DBGrid и рядом с datasource не валялся.
6 H A D G E H O G s
 
20.03.12
12:16
DBGrid - это просто текстовая матрица, отображенная на экран
7 H A D G E H O G s
 
20.03.12
12:17
Аа, блин, перепутал DBGrid и StringGrid
8 Kandellaster
 
20.03.12
12:18
ибо не проще ли в цикле перебрать и в TStringGrid ?
9 ковер
 
20.03.12
12:24
(0) очень просто это делается.
ADOQuery -> DataSource -> DBGrid.  выполняешь запрос вуаля
10 paulic
 
20.03.12
12:30
Я хотел в DBGrid, т.к. надо еще использовать типы данных.

(9)ADOQuery -> DataSource -> DBGrid. я это описал в свое втором посте. Мне нужна связка OLE а не ADO
11 TeddySlaf
 
20.03.12
12:32
а че нельза
DBGrid.DataSource := Quewe;

как-то так.
12 paulic
 
20.03.12
12:36
(11) [Error] Incompatible types: 'TDataSource' and 'OleVariant'
13 Капитан Смоллет
 
20.03.12
12:40
(12) DataSource с какой базой связан? MS SQL?
14 H A D G E H O G s
 
20.03.12
12:46
Кинуть на форму:

TClientDataSet
TDataSource
TDBGrid

У DataSource в DataSet указать ClientDataSet
У DBGrid в dataSource указать DataSource

Добавить колонки в ClientDataSet

Циклом пробежаться по запросу 1С, заполнить
ClientDataSet:

ClientDataSet1.Active:=true;
ClientDataSet1.Insert;
ClientDataSet1.FieldByName('id').Value:=566;
ClientDataSet1.Post;
15 H A D G E H O G s
 
20.03.12
12:47
ClientDataSet без указанного источника данных (Filename) работает в оперативке, иначе работает с xml; cds (внутренний формат), отображая файлы в память.
16 paulic
 
20.03.12
13:09
(14) Спасибо, все работает. Только еще перед всем этим нужно сделать ClientDataSet1.CreateDataSet;
без него ругается.
17 paulic
 
20.03.12
13:12
А не знаешь ли ты способа, как можно без перебора все это загонять?
Просто получается не очень рационально, если, например, у меня столбцов 20, а у меня так и есть.
И если я вдруг захочу другой запрос вызвать, придется ручками править.
18 H A D G E H O G s
 
20.03.12
13:43
нет, не знаю.
Извратился бы с LoadFromStream, но боюсь, игра не стоит свеч
19 H A D G E H O G s
 
20.03.12
13:45
Практика - это, мдать не теория
Тут не важно, NULL у тебя, или Неопределено.
Тут не надо думать - тут делать надо, не так ли, Повелитель NULL-ов?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший