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

xHarbour и MS SQL

Oskar_AAA: Добрый день, коллеги. Переходим на другой софт (АБС Банка переходит на MS SQL), ранее из АБС мне выгружали данные в формате DBF. Сейчас блоком выгрузки заниматься не будут. Таблицы SQL посмотрел.... Задача выбрать из таблиц (10-15 таблиц) данные и записать их в DBF файлы. Своя система написана на xHarbour 1.2.3 Intl. (SimpLex) (Build 20130903) количество файлов DBF - 70, количество счетов более 1 млн. количество проводок более 64 млн. за операционный день - количество проводок 145 тыс, количество счетов с измененными остатками более 40 тыс. Если брать платный xHarbour там вроде как есть библиотеки для подключения к MS SQL, кто-нибудь пользовался и куда копать (Harbour итд)? Система аналитического характера, поэтому есть элементы ноу-хау итд подключиться из свой системы к таблицам MS SQL и вытянуть данные в свою БД - вот и весь вопрос

Ответов - 20

Andrey: Cделал ещё в 2016 году переброску из DBF в PostgreSQL на сайт - туда и обратно. До сих пор отлично работает. Пример брал в МиниГуи. Там в МиниГуи есть пример для работы с MS SQL Сам не смотрел, но должно работать. Можно даже не подключать окна МиниГуи, просто работать с базами. Команда в начале программы SET WINDOW MAIN OFF, и пишешь код как в терминалке. Только код простой, без изысков. Если надо в таблицу выгнать, то тогда придётся немного освоить Tsbrowse. Примеров полно.

Haz: Andrey пишет: Если надо в таблицу выгнать, то тогда придётся немного освоить Tsbrowse. Андрей, зачем tsb для чтения SQL и записи в dbf ? Если подключился , то рекордсет уже гони куда хочешь

Oskar_AAA: Спасибо, Андрей. Ссылку скинь. Посмотрим С МиниГуи не работал....


Oskar_AAA: Спасибо, Андрей. Ссылку скинь. Посмотрим С МиниГуи не работал....

Haz: Oskar_AAA пишет: С МиниГуи не работал.. Minigui тут и не нужен. В Гугле пр запросу harbour + mssql сразу ответ. Или скачать исходники harbour и глянуть примеры. Делать импорт через tsb , это как гланды через

Andrey: Haz пишет: Андрей, зачем tsb для чтения SQL и записи в dbf ? Результат выгонки смотреть. Oskar_AAA пишет: Спасибо, Андрей. Ссылку скинь. Посмотрим С МиниГуи не работал.... http://www.hmgextended.com/ Это сайт Григория ! Работать проще простого, установил, примеры посмотрел и вперед делать то что нужно. Вопросы писать на форуме в теме GUI. Простые перекодировщики делать просто.

Haz: Andrey пишет: Результат выгонки смотреть Тогда Оскар так бы и написал, хочу в гуях посмотреть таблицу. Результат можно и в консоли посмотреть.

Oskar_AAA: Коллеги, можно сюда скинуть пример: подключение к MS SQL чтение таблицы SQL запись в DBF и список библиотек для работы с MS SQL Спасибо

Andrey: Пример живёт по пути - C:\MiniGUI\SAMPLES\Advanced\MSSQL Сам пример [pre2]/* * MiniGui - Microsoft SQL sample * * Copyright 2011 Alen Uzelac <alen@bbm.hr> * */ #include "minigui.ch" #include "dbinfo.ch" REQUEST SQLMIX, SDDODBC Static nSQLConnection *------------------------ Function main() *------------------------ nSQLConnection := 0 SET DATE TO GERMAN SET DELETED ON DEFINE WINDOW Win1 ; AT 0,0 WIDTH 600 HEIGHT 250 ; TITLE "Microsoft SQL demo"; NOSIZE NOMAXIMIZE; MAIN @ 32 , 30 label labLabel1 value "Server:" width 60 @ 30 ,100 textbox txtServer value "SERVER\SQLEXPRESS" width 250 @ 62 , 30 label labLabel2 value "Database:" width 60 @ 60 ,100 textbox txtDatabase value "test" @ 92 , 30 label labLabel3 value "Table:" width 60 @ 90 ,100 textbox txtTable value "demo" @ 122, 30 label labLabel4 value "Username:" width 65 @ 120,100 textbox txtUser value "sa" @ 152, 30 label labLabel5 value "Password:" width 60 @ 150,100 textbox txtPass value "pass" @ 30,400 button btnButton1 caption "Connect to database" width 150 action ConnectDatabase() @ 60,400 button btnButton2 caption "Create table" width 150 action Table_Create() @ 90,400 button btnButton3 caption "Fill with data" width 150 action Table_Fill() @120,400 button btnButton4 caption "Browse data" width 150 action Table_Browse() @150,400 button btnButton5 caption "Disconnect" width 150 action DisconnectDatabase() END WINDOW ShowButtons( .F. ) Win1.Center Win1.Activate RETURN Nil PROCEDURE ShowButtons( lShow ) Win1.btnButton1.enabled := !lShow Win1.btnButton2.enabled := lShow Win1.btnButton3.enabled := lShow Win1.btnButton4.enabled := lShow Win1.btnButton5.enabled := lShow Win1.txtServer.Enabled := !lShow Win1.txtDatabase.Enabled:= !lShow Win1.txtTable.Enabled := !lShow Win1.txtUser.Enabled := !lShow Win1.txtPass.Enabled := !lShow RETURN PROCEDURE ConnectDatabase() nSQLConnection := SQL_ConnectDatabase( Win1.txtServer.Value, Win1.txtDatabase.Value, Win1.txtUser.Value, Win1.txtPass.Value ) If nSQLConnection = 0 msgstop("Connection to server '"+win1.txtServer.value+"' database '"+win1.txtDatabase.value+"' failed.") Else Win1.btnButton1.Caption := "Connected" ShowButtons( .T. ) EndIf RETURN PROCEDURE DisconnectDatabase() IF SQL_Disconnect( nSQLConnection ) > 0 Win1.btnButton1.Caption := "Connect to database" ShowButtons(.F.) ENDIF RETURN PROCEDURE Table_Create() IF SQL_CreateTable( win1.txtTable.value ) MsgInfo( "Table '"+win1.txtTable.value+"' created." ) ELSE MsgStop( "Table '" + win1.txtTable.value+"' not created." ) ENDIF RETURN PROCEDURE Table_Fill() LOCAL nI, nRecords:=100, cStr:="", cDate:=DTOC( Date() ) FOR nI := 1 to nRecords cStr += "('20"+Right(cDate, 2)+"-"+SubStr(cDate, 4, 2)+"-"+Left(cDate, 2)+"'," cStr += "'"+Time()+"'," cStr += "'Demo text "+AllTrim( Str( nI ) )+"'," cStr += "'Table_fill1')," NEXT nI cStr:=left(cStr, len(cStr)-1) // deleting last , IF RDDINFO( RDDI_EXECUTE, "INSERT INTO "+Win1.txtTable.value+" values "+cStr,"SQLMIX" ) MsgInfo( "Added "+AllTrim(str(nRecords))+" records." ) ELSE MsgStop( "Error executing SQL command." + CRLF + "INSERT INTO "+Win1.txtTable.value+" values "+cStr ) ENDIF RETURN PROCEDURE Table_Browse() LOCAL oError TRY DBUSEAREA( .T.,"SQLMIX", "SELECT * FROM "+Win1.txtTable.value, "table" ,,,,nSQLConnection ) CATCH oError MsgInfo("Cannot open table '"+Win1.txtTable.value+"' on server '"+Win1.txtServer.value+"'.") RETURN END DEFINE WINDOW Win2 ; AT Win1.row+100,Win1.col+10 ; WIDTH 500 HEIGHT 400 ; TITLE 'Browse MSSQL data' ; MODAL; FONT 'Arial' SIZE 10 ON KEY Escape ACTION ThisWindow.Release @ 20,20 BROWSE brwBrowse1 ; WIDTH 460 ; HEIGHT 330 ; HEADERS { 'Date', 'Time', 'Text', 'Type'} ; WIDTHS { 80 , 80 , 100 , 80 } ; WORKAREA table ; FIELDS { 'table->date', 'table->time', 'table->text', 'table->type'} ; JUSTIFY { BROWSE_JTFY_LEFT,BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT}; FONT "MS Sans serif" SIZE 09 END WINDOW ACTIVATE WINDOW Win2 DbCloseArea() RETURN Function SQL_ConnectDatabase( cServer, cDatabase, cUser, cPassword) RETURN RDDINFO( RDDI_CONNECT, { "ODBC", "Driver={SQL Server};Server="+cServer+";Database="+cDatabase+";Uid="+cUser+";Pwd="+cPassword+";" },'SQLMIX' ) Function SQL_Disconnect( nConnection ) Return RDDINFO(RDDI_DISCONNECT,nConnection) Function SQL_CreateTable( cTable ) RETURN RDDINFO( RDDI_EXECUTE, "CREATE TABLE [dbo].["+cTable+"] ( [DATE] date NULL, [TIME] varchar(8) NULL, [TEXT] varchar(30) NULL, [TYPE] varchar(30) NULL)","SQLMIX") [/pre2] Библиотеки - качай с сайта Григория. В примере можно оконный интерфейс выкинуть и делать ввод через обычные операторы. Хотя лучше использовать МиниГуи, интерфейс простой, окно, кнопочки, GetBox и т.д. Сборка примера проста до безобразия, в папке запуск compile.bat

Haz: Oskar_AAA пишет: Коллеги, можно сюда скинуть пример: подключение к MS SQL чтение таблицы SQL запись в DBF В примере все , кроме записи в dbf. Запись уверен вопросов не вызывает http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=12385

Oskar_AAA: Доброе утро всем Андрей, Пример живёт по пути - C:\MiniGUI\SAMPLES\Advanced\MSSQL . Вчера скачал xhmg2111_xhb10264.zip - нет примера в архиве

Dima: Oskar_AAA пишет: Вчера скачал xhmg2111_xhb10264.zip Это качай http://www.hmgextended.com/files/CONTRIB/hmg-21.11-setup.exe Для Xharbour , MinGw примеры порезаны...

Oskar_AAA: Пример скомпилировался. MSSQL.exe получился. вставил строки REQUEST SDDODBC, SQLMIX RDDSETDEFAULT( "SQLMIX" ) подключил rddsql.lib sddodbc.lib при сборке своего кода получаю ошибку Error: 'C:\XHARBOUR\LIB\SDDODBC.LIB' contains invalid OMF record, type 0x21 (possibly COFF) SDDODBC.LIB прежний от xHarbour если ставить SDDODBC.LIB из http://www.hmgextended.com/files/CONTRIB/hmg-21.11-setup.exe то выходят ошибки: Error: Unresolved external 'SQLError' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external '_hb_itemPutStr' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLSetEnvAttr' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external '_hb_arrayGetStr' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLDriverConnect' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLDisconnect' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLRowCount' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLAllocHandle' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external '_hb_itemGetStr' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLExecDirect' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLNumResultCols' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLDescribeCol' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLFreeHandle' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLFetch' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external '_hb_itemPutCLPtr' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external '_hb_setGetOSCP' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external '_hb_itemPutStrLen' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Error: Unresolved external 'SQLGetData' referenced from C:\XHARBOUR\LIB\SDDODBC.LIB|sddodbc Какую Lib еще необходимо подключить?

Andrey: Oskar_AAA пишет: Вчера скачал xhmg2111_xhb10264.zip - нет примера в архиве Качать нужно отсюда - http://www.hmgextended.com/download-3/ Кликай на Harbour MiniGUI Extended Edition 21.11 setup. Ставь всё на диск С Потом ставь Borland C++ Compiler version 5.8 Примеры собираются сразу.

Oskar_AAA: Андрей, по ссылке от Dima я скачал . Поучилось скомпилировать пример . Но сообщения по ошибкам см. пост выше. Как быть? Что еще надо добавить ?

Andrey: Oskar_AAA пишет: Как быть? Что еще надо добавить ? Ты компилируешь пример на хХарборе. Я с ним не работаю и не знаю что там в нём. Перешёл просто на ГОТОВУЮ версию МиниГуи с последним Харбором. Григорий его всегда обновляет. Делай по моим рекомендациям выше и сразу всё соберётся. Зачем сидеть на хХарборе, когда всё заново будешь делать ?

Dima: Oskar_AAA Кстати по ссылке что дал HAS, пример чудесно собирается , правда под Harbour. c Xharbour слез давно уже и не юзаю.

Oskar_AAA: Коллеги, спасибо за советы... Будем думать: переход на Harbour что и как много нужно переделывать с консольного xHarbour???

Pasha: Как бы есть смысл пощупать библиотеки из Harbour: extras\rddado contrib\rddsql contrib\sddodbbc там есть свои примеры А при чем здесь hmg ? Только при том, что в примерах hmg есть пример с использованием sqlmix ? Так в этом примере 98% кода от hmg, который просто мешает увидеть сам sqlmix Это как в известном фильме: пример тест тост должен быть кратким, как выстрел, иначе время на отдых не останется. А тут ровно наоборот. Кстати, в xharbour тоже есть rddado, с помощью которого можно вытаскивать данные из sql-баз. Я неоднократно его использовал для подобных разовых операций. И на harbour при этом переползать не надо.

Dima: Oskar_AAA пишет: переход на Harbour что и как много нужно переделывать с консольного xHarbour??? Почитай темку http://clipper.borda.ru/?1-4-0-00001352-000-10001-0-1636740642



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