
Помогите научиться работать с SQL из Клариона
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Andrew Listiev
- Активист
- Сообщения: 166
- Зарегистрирован: 07 Июль 2005, 11:16
- Откуда: Латвия, Рига
- Andrew Listiev
- Активист
- Сообщения: 166
- Зарегистрирован: 07 Июль 2005, 11:16
- Откуда: Латвия, Рига
- Andrew Listiev
- Активист
- Сообщения: 166
- Зарегистрирован: 07 Июль 2005, 11:16
- Откуда: Латвия, Рига
Тогда опиши в Словаре ровно один файлAnDS писал(а):А чем плоха функция? Работает. Взята из примера.Дед Пахом писал(а): Судя по одной-единственной приведенной функции - лучше про ADO забыть![]()
Не понимаю.
Это все хорошо для случая, когда есть словарь.Дед Пахом писал(а): прекрасное штатное средство Clarion -Код: Выделить всё
myfile{prop:sql}='SELECT a,b,c FROM ' & myfile{prop:name} & ' WHERE d=' & x
А когда словаря нет?
Result File,....
Field1 Cstring(1000)
Field2 Cstring(1000)
....
End
ResultView View(Result)
....
End
ResultView{Prop:SQL}='Select .... From Table ....'
А дальше через ResultView вычитывай данные из твоего запроса
-
- Прохожий
- Сообщения: 4
- Зарегистрирован: 22 Июль 2008, 11:45
Re: Помогите научиться работать с SQL из Клариона
Давным давно такой способ как то часто использовал на С6
Описываю такой файлик для 50 полей или сколько надо
DUAL FILE,DRIVER('MSSQL','/TURBOSQL=TRUE'),OWNER(GLO:connString),NAME(DUAL_file),PRE(DUA),BINDABLE,THREAD
Record RECORD,PRE()
DUMMY1 CSTRING(512),NAME('"DUMMY"')
DUMMY2 CSTRING(512),NAME('"DUMMY"')
DUMMY3 CSTRING(512),NAME('"DUMMY"')
DUMMY4 CSTRING(512),NAME('"DUMMY"')
DUMMY5 CSTRING(512),NAME('"DUMMY"')
DUMMY6 CSTRING(512),NAME('"DUMMY"')
DUMMY7 CSTRING(512),NAME('"DUMMY"')
DUMMY8 CSTRING(512),NAME('"DUMMY"')
DUMMY9 CSTRING(512),NAME('"DUMMY"')
DUMMY10 CSTRING(512),NAME('"DUMMY"')
DUMMY11 CSTRING(512),NAME('"DUMMY"')
DUMMY12 CSTRING(512),NAME('"DUMMY"')
DUMMY13 CSTRING(512),NAME('"DUMMY"')
DUMMY14 CSTRING(512),NAME('"DUMMY"')
DUMMY15 CSTRING(512),NAME('"DUMMY"')
DUMMY16 CSTRING(512),NAME('"DUMMY"')
DUMMY17 CSTRING(512),NAME('"DUMMY"')
DUMMY18 CSTRING(512),NAME('"DUMMY"')
DUMMY19 CSTRING(512),NAME('"DUMMY"')
DUMMY20 CSTRING(512),NAME('"DUMMY"')
DUMMY21 CSTRING(512),NAME('"DUMMY"')
DUMMY22 CSTRING(512),NAME('"DUMMY"')
DUMMY23 CSTRING(512),NAME('"DUMMY"')
DUMMY24 CSTRING(512),NAME('"DUMMY"')
DUMMY25 CSTRING(512),NAME('"DUMMY"')
DUMMY26 CSTRING(512),NAME('"DUMMY"')
DUMMY27 CSTRING(512),NAME('"DUMMY"')
DUMMY28 CSTRING(512),NAME('"DUMMY"')
DUMMY29 CSTRING(512),NAME('"DUMMY"')
DUMMY30 CSTRING(512),NAME('"DUMMY"')
DUMMY31 CSTRING(512),NAME('"DUMMY"')
DUMMY32 CSTRING(512),NAME('"DUMMY"')
DUMMY33 CSTRING(512),NAME('"DUMMY"')
DUMMY34 CSTRING(512),NAME('"DUMMY"')
DUMMY35 CSTRING(512),NAME('"DUMMY"')
DUMMY36 CSTRING(512),NAME('"DUMMY"')
DUMMY37 CSTRING(512),NAME('"DUMMY"')
DUMMY38 CSTRING(512),NAME('"DUMMY"')
DUMMY39 CSTRING(512),NAME('"DUMMY"')
DUMMY40 CSTRING(512),NAME('"DUMMY"')
DUMMY41 CSTRING(512),NAME('"DUMMY"')
DUMMY42 CSTRING(512),NAME('"DUMMY"')
DUMMY43 CSTRING(512),NAME('"DUMMY"')
DUMMY44 CSTRING(512),NAME('"DUMMY"')
DUMMY45 CSTRING(512),NAME('"DUMMY"')
DUMMY46 CSTRING(512),NAME('"DUMMY"')
DUMMY47 CSTRING(512),NAME('"DUMMY"')
DUMMY48 CSTRING(512),NAME('"DUMMY"')
DUMMY49 CSTRING(512),NAME('"DUMMY"')
DUMMY50 CSTRING(512),NAME('"DUMMY"')
END
END
DUAL_file = 'dbo.DUAL' !таблица
GLO:connString = clip(ConnectStr) !'Сервер,База,Логин,Пароль;Trusted_Connection=Yes'
open(DUAL,10H)
set(DUAL)
dual{prop:sql}= clip(SQLstrBuf) !'Select COMPANY.name, COMPANY.sname from dbo.COMPANY'
next(DUAL)
В полях DUMMY1, DUMMY2 и т.д.
получаю разбитый по полям соверщенно любой запрос,
что Select что Update и процедуры
запускал 200 килобайтные запросы.
На сервере ORACLE не нужно иметь табличку DUAL,
на MS нужно завести, обычно код такой
open(DUAL,10H)
!-------при ошибке (нет объекта) создать фиктивную таблицу----------
if FileErrorCode() = 'S0002'
dual{prop:sql}= 'USE [MYBAZA]; ' &|
'GO ' &|
'SET ANSI_NULLS ON; ' &|
'GO ' &|
'SET QUOTED_IDENTIFIER ON; ' &|
'GO ' &|
'CREATE TABLE [DUAL] ( ' &|
'[DUMMY] char(512) NULL) ' &|
'ON [PRIMARY]; ' &|
'GO ' &|
'insert dual values(''x'');'
next(DUAL)
if ErrorCode() = 90 then message(FileErrorCode()& ' - ' &FileError(),'Ошибка создания DUAL',icon:hand).
end
Если запрос ничего не вернет по причине ошибки кода, сервер конечно ругнется а из данных получаю "Х" или что введешь в эту таблицу (1 строка)
Проверено отлично работает на MSSQL, ORACLE
Описываю такой файлик для 50 полей или сколько надо
DUAL FILE,DRIVER('MSSQL','/TURBOSQL=TRUE'),OWNER(GLO:connString),NAME(DUAL_file),PRE(DUA),BINDABLE,THREAD
Record RECORD,PRE()
DUMMY1 CSTRING(512),NAME('"DUMMY"')
DUMMY2 CSTRING(512),NAME('"DUMMY"')
DUMMY3 CSTRING(512),NAME('"DUMMY"')
DUMMY4 CSTRING(512),NAME('"DUMMY"')
DUMMY5 CSTRING(512),NAME('"DUMMY"')
DUMMY6 CSTRING(512),NAME('"DUMMY"')
DUMMY7 CSTRING(512),NAME('"DUMMY"')
DUMMY8 CSTRING(512),NAME('"DUMMY"')
DUMMY9 CSTRING(512),NAME('"DUMMY"')
DUMMY10 CSTRING(512),NAME('"DUMMY"')
DUMMY11 CSTRING(512),NAME('"DUMMY"')
DUMMY12 CSTRING(512),NAME('"DUMMY"')
DUMMY13 CSTRING(512),NAME('"DUMMY"')
DUMMY14 CSTRING(512),NAME('"DUMMY"')
DUMMY15 CSTRING(512),NAME('"DUMMY"')
DUMMY16 CSTRING(512),NAME('"DUMMY"')
DUMMY17 CSTRING(512),NAME('"DUMMY"')
DUMMY18 CSTRING(512),NAME('"DUMMY"')
DUMMY19 CSTRING(512),NAME('"DUMMY"')
DUMMY20 CSTRING(512),NAME('"DUMMY"')
DUMMY21 CSTRING(512),NAME('"DUMMY"')
DUMMY22 CSTRING(512),NAME('"DUMMY"')
DUMMY23 CSTRING(512),NAME('"DUMMY"')
DUMMY24 CSTRING(512),NAME('"DUMMY"')
DUMMY25 CSTRING(512),NAME('"DUMMY"')
DUMMY26 CSTRING(512),NAME('"DUMMY"')
DUMMY27 CSTRING(512),NAME('"DUMMY"')
DUMMY28 CSTRING(512),NAME('"DUMMY"')
DUMMY29 CSTRING(512),NAME('"DUMMY"')
DUMMY30 CSTRING(512),NAME('"DUMMY"')
DUMMY31 CSTRING(512),NAME('"DUMMY"')
DUMMY32 CSTRING(512),NAME('"DUMMY"')
DUMMY33 CSTRING(512),NAME('"DUMMY"')
DUMMY34 CSTRING(512),NAME('"DUMMY"')
DUMMY35 CSTRING(512),NAME('"DUMMY"')
DUMMY36 CSTRING(512),NAME('"DUMMY"')
DUMMY37 CSTRING(512),NAME('"DUMMY"')
DUMMY38 CSTRING(512),NAME('"DUMMY"')
DUMMY39 CSTRING(512),NAME('"DUMMY"')
DUMMY40 CSTRING(512),NAME('"DUMMY"')
DUMMY41 CSTRING(512),NAME('"DUMMY"')
DUMMY42 CSTRING(512),NAME('"DUMMY"')
DUMMY43 CSTRING(512),NAME('"DUMMY"')
DUMMY44 CSTRING(512),NAME('"DUMMY"')
DUMMY45 CSTRING(512),NAME('"DUMMY"')
DUMMY46 CSTRING(512),NAME('"DUMMY"')
DUMMY47 CSTRING(512),NAME('"DUMMY"')
DUMMY48 CSTRING(512),NAME('"DUMMY"')
DUMMY49 CSTRING(512),NAME('"DUMMY"')
DUMMY50 CSTRING(512),NAME('"DUMMY"')
END
END
DUAL_file = 'dbo.DUAL' !таблица
GLO:connString = clip(ConnectStr) !'Сервер,База,Логин,Пароль;Trusted_Connection=Yes'
open(DUAL,10H)
set(DUAL)
dual{prop:sql}= clip(SQLstrBuf) !'Select COMPANY.name, COMPANY.sname from dbo.COMPANY'
next(DUAL)
В полях DUMMY1, DUMMY2 и т.д.
получаю разбитый по полям соверщенно любой запрос,
что Select что Update и процедуры
запускал 200 килобайтные запросы.
На сервере ORACLE не нужно иметь табличку DUAL,
на MS нужно завести, обычно код такой
open(DUAL,10H)
!-------при ошибке (нет объекта) создать фиктивную таблицу----------
if FileErrorCode() = 'S0002'
dual{prop:sql}= 'USE [MYBAZA]; ' &|
'GO ' &|
'SET ANSI_NULLS ON; ' &|
'GO ' &|
'SET QUOTED_IDENTIFIER ON; ' &|
'GO ' &|
'CREATE TABLE [DUAL] ( ' &|
'[DUMMY] char(512) NULL) ' &|
'ON [PRIMARY]; ' &|
'GO ' &|
'insert dual values(''x'');'
next(DUAL)
if ErrorCode() = 90 then message(FileErrorCode()& ' - ' &FileError(),'Ошибка создания DUAL',icon:hand).
end
Если запрос ничего не вернет по причине ошибки кода, сервер конечно ругнется а из данных получаю "Х" или что введешь в эту таблицу (1 строка)
Проверено отлично работает на MSSQL, ORACLE
-
- Старожил
- Сообщения: 225
- Зарегистрирован: 05 Сентябрь 2005, 19:21
- Откуда: Пермь
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
Re: Помогите научиться работать с SQL из Клариона
Пользую ФМ3. Можно, как с DSN,так и без него, предварительно настроив строку подключения к ODBC источнику.