Форум » [x]Harbour » xHarbour и SyBase » Ответить

xHarbour и SyBase

Oskar_AAA: Добрый день, давно не был у нас на форуме. Поставлена задача: выбрать данные из нескольких таблиц Sybase и записать их в DBF файлы. Есть исходный текст макроса на Excel, который выбирает данные, но поменялась структура таблиц, их наименование и взаимосвязи между ними... Описание полей и таблиц Sybase есть. Хотелось бы создать модуль в программе на xHarobour и выбирать из таблиц Sybase данные... С чего начать и Как это сделать ? Спасибо.

Ответов - 53, стр: 1 2 3 All

Dima: Oskar_AAA пишет: выбрать данные из нескольких таблиц Sybase Что это за формат баз ?

Oskar_AAA: Формат таблиц - не знаю... Фрагмент макроса Excel Sub LoadFL() Dim wrkODBC As Workspace Dim conPubs As Connection Dim realst As Recordset Dim restst As Recordset sql_odbc = Info.[D2].Value ' Источник ODBC sql_user = Info.[D3].Value ' Пользователь БД sql_pswd = Info.[D4].Value ' Пароль пользователя БД wb_StartSh = Info.[D6].Value ' Смена начала 'wb_EndSh = Info.[D7].Value ' Смена окончания Real1 = " SELECT " & _ " azsno, " & _ " shiftid, " & _ " (select timepoint from shiftslog where shiftslog.shiftid=shiftrep2.shiftid and shiftslog.azsno=shiftrep2.azsno and state=1), " & _

Haz: Oskar_AAA пишет: Источник ODBC Можно подключиться через ODBC . Я к сожалению с этим механизмом мало работал , можно посмотреть примеры в харбуре ( там есть на примере MSSQL ). Ну или подскажет кто


Haz: Haz пишет: Фрагмент макроса Exce Если коротко, то для решения задачи нужно 1. Правильный ConnectString для Sybase . по примеру этого для MSSQL [pre2] oConnection:Open( "DRIVER={MySQL ODBC 3.51 Driver};" + ; "server=" + cServer + ; ";database=" + cDataBase + ; ";uid=" + cUserName + ; ";pwd=" + cPassword ) oConnection:Execute( "SELECT * FROM " + cTableName ) [/pre2] 2. Правильный SQL запрс ( нужно знать таблицы и поля ) . К примеру SELECT выше 3. Перебрать в цикле весь набор данных ( RecordSet ) типо как тут ( пример был для других целей )) [pre2] for l := 1 to len(oConnection:aRecordSet) for c := 1 to len(oConnection:aRecordSet[l]) do case case valtype(oConnection:aRecordSet[l][c]) == "C" c_TmpContent := alltrim(oConnection:aRecordSet[l][c]) case valtype(oConnection:aRecordSet[l][c]) == "N" c_TmpContent := alltrim(str(oConnection:aRecordSet[l][c])) case valtype(oConnection:aRecordSet[l][c]) == "D" c_TmpContent := alltrim(DtoC(oConnection:aRecordSet[l][c])) case valtype(oConexion:aRecordSet[l][c]) == "L" c_TmpContent := alltrim(oConnection:aRecordSet[l][c]) end case ТУТ ПИШЕМ В DBF next next [/pre2] PS Главное это oConnection получить и раз таблицы и поля есть - то остальное просто ))

Oskar_AAA: HAZ Спасибо, какие библиотеки, Include итд надо подключить.

Haz: Oskar_AAA пишет: какие библиотеки, Include итд надо подключитькажется ADO хватит [pre2] #include "rddsys.ch" #include "adordd.ch" [/pre2] и библиотеки [pre2] adordd hbusrrdd [/pre2] PS connectstring должен где-то в EXCEL макросах прписан. явно или неявно , но быть должен

Oskar_AAA: Haz у меня нет библиотек ADORDD.Lib, HBUSRRDD.Lib RDDSYS.Ch, ADORDD.Ch есть Использую xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476)

Haz: Это библиотеки Harbour , уверен в xHarbour есть какие-то аналоги. Подсказать не могу т.к. работаю только с Harbour. Точнее бивлиотеки обнаружил в поставке MiniGui Чисто в Harbour есть SDDODBC ( возможно он же в xHarbour ) пример с драйвером MySQL оттуда [pre2] #require "rddsql" #require "sddodbc" #include "simpleio.ch" REQUEST SQLMIX, SDDODBC PROCEDURE Main() LOCAL nConnection, nI, aI Set( _SET_DATEFORMAT, "yyyy-mm-dd" ) rddSetDefault( "SQLMIX" ) nConnection := rddInfo( RDDI_CONNECT, { "ODBC", "Server=localhost;Driver={MySQL ODBC 5.1 Driver};dsn=;User=test;database=test;" } ) IF nConnection == 0 ? "Unable connect to server", rddInfo( RDDI_ERRORNO ), rddInfo( RDDI_ERROR ) RETURN ENDIF ? nConnection ? rddInfo( RDDI_EXECUTE, "DROP TABLE country" ) ? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" ) ? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600),('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" ) ? dbUseArea( .T., , "SELECT * FROM country", "country" ) ? "LASTREC:", LastRec() DO WHILE ! Eof() aI := Array( FCount() ) FOR nI := 1 TO FCount() aI[nI] := FieldGet( nI ) NEXT ? RecNo(), hb_ValToExp( aI ) dbSkip() ENDDO ? "LASTREC:", LastRec() dbCloseAll() RETURN [/pre2] ЗЫ. Примеров много,но с SyBase нет и по прежнему главное - получить коннект

Oskar_AAA: скачал ADORDD.zip 2007 года в архиве есть библиотеки и примеры. http://www.fivetechsoft.com/files/adordd.zip будем пробовать... Спасибо, друзья

Oskar_AAA: HAZ Доброе утро, скомпилировал MYSQL3.prg из архива ADORDD.Zip вылетает при запуске по ошибке Module: 'adordd.prg' was compiled into PCODE version: 9,this version of xHarbour expects version: 10Module: 'adordd.prg' was compiled into PCODE version: 9,this version of xHarbour expects version: 10

Haz: Oskar_AAA пишет: скомпилировал MYSQL3.prg из архива ADORDD.Zip вылетает при запуске по ошибке Посмотри в примерах xHarbour , уверен там есть не одно использование ODBC Или велкам в Harbour , в нем с десяток различных примеров наберется точно PS можешь попробовать еще ADORDD из поставки MiniGui , может он соберется . в скачанном тобой архиве версия от 2007/05/12 в Minigui - 2008/07/08

Andrey: Oskar_AAA пишет: Module: 'adordd.prg' was compiled into PCODE version: 9,t Такую ошибку встречал при компиляции новым компилятором при старых obj скомпилированным старым компилятором. Попробуй удалить все obj и сделать повторную компиляцию.

Dima: Andrey пишет: Попробуй удалить все obj и сделать повторную компиляцию +1

Oskar_AAA: Добрый вечер, коллеги. Тоже думал про повторную компиляцию. Но не помню как ее делать.... Obj файлы - где? Нашел в своей сборке ADORDD.prg от 11.06.2009. Obj и С файлы из своих PRG удаляются при каждой сборке EXE модуля...

azoo: Учитывая что в Harbour нет норм. драйвера для Sybase, может проще будет написать программу по выгрузке из Sybase в CSV (или SDF ?) на Delphi например, а потом получившийся текстовый файл выгрузить в DBF средствами Harbour или Clipper.

Oskar_AAA: Добрый вечер, из SYBASE я выгружаю в DBF, но пока приходится набирать запросы по таблицам. Написанием программы в Sybase опыта нет. Но требуется : ввести номер смены, выборка из 4 таблиц записей по заданному номеру смены в 4 файла DBF вот и все.. а далее уже xHarbour

Andrey: azoo пишет: может проще будет написать программу по выгрузке из Sybase в CSV (или SDF ?) на Delphi например, Из вики: Возможно использование ряда драйверов базы данных таких языков программирования как Java, C/C++m, PHP, PERL, Python, Ruby, ADO.Net. Делай выгрузку на любом языке...

Oskar_AAA: Добрый день, необходимо перевести из UTF8 в RU866 База DBF уже создана из SYBASE посредством выбора данных по условию и экспортирована в формате DBF. Программа xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476) Copyright 1999-2009, http://www.xharbour.org http://www.harbour-project.org/ фрагмент кода REQUEST HB_CODEPAGE_RU866 REQUEST DBFCDX,DBFFPT HB_SetCodePage( "RU866" ) RDDSetDefault('DBFCDX') Use UTF8 Alias UTF Exclusive NEW DbGoTop() Do While Eof() Repl Name_866 With HB_UTF8TOSTR(Name,"RU866") DbSkip() Enddo Поле Name_866 получается пустым ? Добрый день, необходимо перевести из UTF8 в RU866 База DBF уже создана из SYBASE посредством выбора данных по условию и экспортирована в формате DBF. Программа xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6476) Copyright 1999-2009, http://www.xharbour.org http://www.harbour-project.org/ фрагмент кода REQUEST HB_CODEPAGE_RU866 REQUEST DBFCDX,DBFFPT HB_SetCodePage( "RU866" ) RDDSetDefault('DBFCDX') Use UTF8 Alias UTF Exclusive NEW DbGoTop() Do While Eof() Repl Name_866 With HB_UTF8TOSTR(Name,"RU866") DbSkip() Enddo Поле Name_866 получается пустым ?

Oskar_AAA: Dim Если ставить REQUEST HB_CODEPAGE_UTF8EX Error: Unresolved external '_HB_FUN_HB_CODEPAGE_UTF8EX'

Dima: Oskar_AAA пишет: Error: Unresolved external '_HB_FUN_HB_CODEPAGE_UTF8EX' Harbour ?



полная версия страницы