|
Запрос в 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-ов? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |