Помогите научиться работать с SQL из Клариона

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Andrew Listiev
Активист
Сообщения: 166
Зарегистрирован: 07 Июль 2005, 11:16
Откуда: Латвия, Рига

Сообщение Andrew Listiev »

Вы там ничего не напутали? DNS каким боком с ODBC связан? Может DSN??? :D
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Сообщение Дед Пахом »

Да какая разница, буквы-то одни и те же.
С уважением, ДП
Аватара пользователя
Andrew Listiev
Активист
Сообщения: 166
Зарегистрирован: 07 Июль 2005, 11:16
Откуда: Латвия, Рига

Сообщение Andrew Listiev »

В хелпе от 6-ки есть топик - "ODBC DSN-less Connection support". Почитайте его.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Сообщение Дед Пахом »

Вот что значит уже полгода без Clarion, ведь сам же этим DSN-less всё время пользовался...
С уважением, ДП
Аватара пользователя
Andrew Listiev
Активист
Сообщения: 166
Зарегистрирован: 07 Июль 2005, 11:16
Откуда: Латвия, Рига

Сообщение Andrew Listiev »

Да уж, фенечек поприбавилось :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Сообщение Yufil »

AnDS писал(а):
Дед Пахом писал(а): Судя по одной-единственной приведенной функции - лучше про ADO забыть :cry:
А чем плоха функция? Работает. Взята из примера.
Не понимаю.
Дед Пахом писал(а): прекрасное штатное средство 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 вычитывай данные из твоего запроса
deesoftprog
Прохожий
Сообщения: 4
Зарегистрирован: 22 Июль 2008, 11:45

Re: Помогите научиться работать с SQL из Клариона

Сообщение deesoftprog »

Давным давно такой способ как то часто использовал на С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
Smith
Старожил
Сообщения: 225
Зарегистрирован: 05 Сентябрь 2005, 19:21
Откуда: Пермь
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Помогите научиться работать с SQL из Клариона

Сообщение Smith »

Пользую ФМ3. Можно, как с DSN,так и без него, предварительно настроив строку подключения к ODBC источнику.
Ответить