MS SQL -> .CSV file как?

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Caня

MS SQL -> .CSV file как?

Сообщение Caня »

Уважаемые,
Как в С6.1 (Legacy) реализовать экспорт данных из MS SQL в простой текстовый ASCII фал с разделением данных Tab-ом? SQL запрос всегда разный, соответсвенно выдает разное количество полей и записией.

Можно ответить в начале только суть.
А если не разберусь то потом и детали спрошу.

С уважением.
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Сообщение ru_alex »

Объявляешь ASCII файл, а строку формируешь с Tab:

"знач. поля1" & '<9>' & "знач. поля2" и тд.

Зы: На память tab это 9, но могу ошибаться.
Зы2: Не забудь про заголовок, если нужен.
Последний раз редактировалось ru_alex 23 Декабрь 2005, 13:59, всего редактировалось 1 раз.
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Сообщение ru_alex »

В догонку...
В MSSQL есть модуль импорта/экспорта данных, в нем CSV точно есть.
Я сам не пробовал, но наверняка можно командами SQL такой экспорт сделать.
Аватара пользователя
Ravenous
Бывалый
Сообщения: 56
Зарегистрирован: 06 Июль 2005, 14:25
Откуда: Москва

Сообщение Ravenous »

посмотри в Book Online OpenDataSource, OpenRowSet,
правда раз кол-во столбцов каждый раз разное
нужно для каждого нового файла свою схему (schema.ini) прописывать.
Благодарень за терпение и понимание.

Изображение
Caня

Сообщение Caня »

Спасибо за ответы.
Вроде сам допер.
Вот как я сделал, если кому интерестно:
В Declaration Section объявил 2 файла, один для записи результатов на локальном диске, другой для формирования SQL запроса.

Код: Выделить всё

CSVFile          FILE,DRIVER('ASCII'),NAME(FilePath),PRE(CSV),CREATE,THREAD
Record             RECORD,PRE()
Desc                 STRING(8000)
                   END
                 END

SQLFile         FILE,DRIVER('MSSQL'),OWNER('(local),IX'),NAME('dbo.SQLFile'),PRE(SQL),BINDABLE,CREATE
Record            RECORD,PRE()
DSCR                STRING(8000)
                  END
                END
Ну и в Embeds After Code Generated для кнопки (Accepted)

Код: Выделить всё

s# = FILEDIALOG('Select File', FilePath, 'CSV|*.TXT',1)
SETPATH(FilePath)
DLMTR='<09>'
CREATE(CSVFile)
OPEN(CSVFile)
CREATE(SQLFile)
OPEN(SQLFile)
SQLstring='select convert(varchar,i.name)+'''&DLMTR&'''+convert(varchar,c.name) as text from ITMS i, CUSTS c where i.cust=c.id'
CSV:Record='HEADER'&DLMTR&'QUERY:'&SQLstring
ADD(CSVFile)
SQLFile{PROP:SQL} = CLIP(SQLstring)
LOOP
NEXT(SQLFile)
if errorcode() then break.
    SQLreply=SQL:Record
    CSV:Record=SQL:Record
    ADD(CSVFile)
.
CLOSE(SQLFile)
CLOSE(CSVFile)
DISPLAY
Это только работающая модель. С нее можно вылепить нужный код.
Есть ограничение 8000 знаков на запись, но в большинстве случаев этого хватит. А кому не хватит, можно подправить. ;)

С уважением.
Ответить