Вверх ↑
Этот топик читают: Гость
Ответов: 4309
Рейтинг: 670
#16: 2018-03-26 10:40:20 ЛС | профиль | цитата
zhorik5, ты выполнил
Netspirit писал(а):
В свойстве Driver согласно примерам указывается только название драйвера без слова "DRIVER = ".

Netspirit писал(а):
Оставь ConnectionDrv пустым.


карма: 23

0
Ответов: 16884
Рейтинг: 1237
#17: 2018-03-26 18:18:35 ЛС | профиль | цитата
Netspirit писал(а):
у тебя есть Firebird+ODBC driver? Там в комплекте идёт employee.fdb
Драйвер есть, а employee.fdb нет.
Ставить IBExpert неохота.
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4309
Рейтинг: 670
#18: 2018-03-27 10:50:34 ЛС | профиль | цитата
Tad писал(а):
а employee.fdb нет.
Дай в поиск внутри папки, в которой установлен Firebird (у меня она в \examples\empbuild\)

Держи мою.
карма: 23

0
файлы: 1FB EMPLOYEE FDB.zip [94.6KB] [279]
Ответов: 60
Рейтинг: 9
#19: 2020-05-11 09:19:30 ЛС | профиль | цитата
Здравствуйте. При работе с действующей базой Firebird столкнулся с «неприятной» проблемой.
Компоненты ODBC и DS_ODBC на один и тот же запрос выдают очень разные результаты.
ODBC and DS_ODBC.png
Вверху ODBC внизу DS_ODBC.
Было замечено что ошибки выдают оба компонента.
ODBC:
- Вместо значения “null” выдаёт “Error”
- Некорректно отображает некоторые столбцы с датами (большинство правильно)
DS_ODBC:
- В большинстве случае выдает какой-то “мусор”, но некоторые столбцы отображает правильно.
Схема
Add(MainForm,2953706,56,63)
{
Width=746
Height=466
Point(onClose)
link(onCreate,15147289:doExecute,[])
link(onClose,1343427:doEvent1,[(116,90)(116,132)])
}
Add(DS_ODBC,5175017,308,77)
{
Name="saturnus2"
Point(onError)
}
Add(DSC_Query,2854535,308,350)
{
DSManager="saturnus2"
link(onQuery,7100258:doAddRow,[])
link(onColumns,7100258:doAddCols,[])
}
Add(MTStrTbl,9872097,483,350)
{
Width=730
Height=195
Align=4
Name="tabl"
}
Add(MST_DB,7100258,364,350)
{
MSTControl="tabl"
}
Add(InfoTip,1192744,462,56)
{
Info=#42:http://www.firebirdsql.org/en/odbc-driver/|0:|
Width=239
Height=18
}
Add(ODBC,1585281,308,266)
{
Driver="Firebird/InterBase(r) driver"
Exclusive=1
Point(ColumnsCount)
Point(doConnectDrv)
Point(ConnectionDrv)
Point(onColumnsInfo)
Point(FieldName)
Point(FieldType)
Point(FieldSize)
link(onStreamString,12021712:doConvert,[])
link(ConnectionDrv,10289808:Value,[])
link(onColumnsInfo,16719132:doAddColumn,[])
}
Add(FormatStr,15707348,189,273)
{
Mask="SELECT FIRST 50 * FROM "TBL_ANIMAL"\r\n"
link(onFString,8088289:doEvent1,[])
}
Add(Menu,8896884,56,266)
{
Menu=#5:start|4:test|
Point(onSelectNum)
link(onSelectNum,13964963:doEvent,[])
}
Add(StringTable,16719132,483,266)
{
Top=195
Width=730
Height=232
Align=5
ClearAll=0
Point(doAddColumn)
}
Add(InlineCode,11414078,420,266)
{
@Hint=#45:Формирует строку для добавления в StringTable|
WorkPoints=#53:doString=Формирование строки для вывода в StringTable|
EventPoints=#74:onEvent=Происходит когда все поля строки заполнены и выдаёт строку в поток|
DataPoints=#45:Fields=Количество полей для заполнения строки|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|23:uses kol, Share, Debug;|0:|4:type|30: THiAsmClass = class( TDebug )|10: private|9: public|26: _data_Data: THI_Event;|22: Fields: THI_Event;|23: onEvent: THI_Event;|16: Count: Word;|19: StrOut: String;|53: procedure doString( var _Data:TData; Index:word );|5: end;|0:|14:implementation|0:|62:procedure THiAsmClass.doString( var _Data:TData; Index:word );|5: var|17: Data : TData;|15: i: Integer;|20: strTemp: String;|7: begin|31: Data.Data_type := data_str;|21: Data.sdata := '';|51: strTemp := ReadString( _data, _data_Data, '' );|31: Data.Data_type := data_int;|20: Data.idata := 0;|41: i := ReadInteger( _data, Fields, 0 );|38: strOut := strOut + strTemp + ';' ;|17: Inc( Count );|27: if Count = i then begin|36: _hi_onEvent( onEvent, strOut );|16: Count := 0;|18: strOut := '';|15: end; { If }|6: end;|0:|4:end.|
link(onEvent,16719132:doAdd,[])
link(Fields,1585281:ColumnsCount,[(426,257)(412,257)(412,313)(314,313)])
}
Add(Hub,1343427,245,126)
{
link(onEvent1,5175017:doClose,[(291,132)(291,90)])
link(onEvent2,1585281:doDisconnect,[(277,139)(277,293)])
}
Add(Hub,10831191,245,77)
{
link(onEvent1,5175017:doOpen,[])
link(onEvent2,10289808:doValue,[(284,90)(284,216)])
}
Add(Memory,10289808,315,210)
{
link(onData,1585281:doConnectDrv,[(354,216)(354,251)(298,251)(298,300)])
}
Add(Hub,8088289,238,273)
{
link(onEvent1,1585281:doQuery,[])
link(onEvent2,2854535:doQuery,[(270,286)(270,356)])
}
Add(IndexToChanel,13964963,112,273)
{
link(onEvent1,15707348:doString,[])
}
Add(StreamConvertor,12021712,364,266)
{
Mode=6
link(onResult,11414078:doString,[])
}
Add(Convertor,14140405,371,210)
{
Mode=11
}
Add(ODialog,15147289,126,77)
{
Filter="fdb|*.fdb"
link(onExecute,14538752:doString,[])
}
Add(FormatStr,14538752,182,77)
{
Mask="DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=localhost:%1;"
link(onFString,10831191:doEvent1,[])
}

База (около 23 мб)
https://yadi.sk/d/aphZ9JNOKOdjEw

Редактировалось 2 раз(а), последний 2020-05-11 12:45:29
карма: 3

0
Ответов: 60
Рейтинг: 9
#20: 2020-11-19 09:48:43 ЛС | профиль | цитата
Сделал несколько примеров работы с базой данных Firebird. Возможно, кому-то пригодится.
В схемах измените путь расположения БД на свой (в пути к папке с БД не должно быть русских букв).

1. Работа с БД через утилиту isql.exe, входящую в дистрибутив Firebird.
Add(MainForm,2953706,56,168)
{
Caption="Выгрузка из базы isql"
Point(onClose)
link(onCreate,4227353:doEvent1,[])
link(onClose,7284808:doEnum,[(116,195)(116,314)])
}
Add(StrList,5952139,175,147)
{
@Hint=#11:Запрос к БД|
FileName="Template.sql"
Strings=#18:/*** Settings ***/|15:set heading on;|13:set list off;|13:set echo off;|22:set sqlda_display off;|0:|18:/*** Commands ***/|27:select * from "TBL_ANIMAL";|0:|5:exit;|0:|0:|
Point(doSave)
AddHint(174,-42,80,13,@Hint)
}
Add(Hub,4227353,126,182)
{
OutCount=3
link(onEvent1,4909964:doSave,[(151,188)(151,132)])
link(onEvent2,5952139:doSave,[(158,195)(158,181)])
link(onEvent3,8423034:doExec,[])
}
Add(WinExec,8423034,175,196)
{
FileName="Template.bat"
Mode=0
RunEvent=1
Point(doConsoleExec)
Point(onConsoleResult)
link(onFinished,10005690:doEvent1,[])
}
Add(StrList,11299732,175,252)
{
Strings=#12:Template.sql|12:Template.bat|8:test.txt|
Point(doLoad)
}
Add(ArrayEnum,7284808,189,308)
{
link(onItem,4549278:doDelete,[])
link(Array,11299732:Array,[])
}
Add(StrList,4909964,175,98)
{
@Hint=#34:Укажите расположение БД и isql.exe|
FileName="Template.bat"
Strings=#9:@echo off|0:|8:setlocal|0:|57:path = c:\Program Files (x86)\Firebird\Firebird_2_0\bin\;|0:|177:isql.exe -user "SYSDBA" -password "masterkey" "localhost/3050:c:\Users\Public\Desktop\Examples_with_Firebird_database\TEST_DB.FDB" -i Template.sql -o test.txt -m -pagelength 500|0:|8:endlocal|0:|4:exit|0:|
Point(doSave)
AddHint(86,-31,168,26,@Hint)
}
Add(FileTools,4549278,238,294)
{
}
Add(Memo,8915684,308,154)
{
Width=384
Height=130
Align=2
Font=[Lucida Console,8,0,0,204]
ModeSp=1
FileName="test.txt"
ScrollBars=3
Point(doLoad)
}
Add(StrList,3489578,392,182)
{
FileName="test.txt"
Point(doLoad)
Point(doGetString)
Point(onGetString)
Point(String)
}
Add(Hub,10005690,259,203)
{
OutCount=4
link(onEvent1,8915684:doLoad,[(284,209)(284,188)])
link(onEvent2,3489578:doLoad,[])
link(onEvent3,14972792:doData,[])
link(onEvent4,4732775:doEnum,[(298,230)(298,265)])
}
Add(ArrayEnum,4732775,406,259)
{
link(onItem,7799271:doCompare,[])
link(onEndEnum,3882402:doConvert,[(449,272)(449,314)])
link(Array,3489578:Array,[])
}
Add(StrMask,7799271,462,259)
{
link(onFalse,1924644:doLoad,[])
}
Add(Hub,13615548,357,217)
{
link(onEvent1,3489578:doGetString,[])
link(onEvent2,3489578:doDelete,[(382,230)(382,202)])
}
Add(MTStrTbl,16072772,721,308)
{
Left=405
Top=210
Align=5
Name="asd"
link(CodePageSet,14915785:GetData,[])
}
Add(StrList,7382582,560,259)
{
}
Add(StreamConvertor,3882402,560,308)
{
Mode=7
Point(Data)
link(onResult,5019026:doLoadFromStream,[])
link(Data,7382582:Text,[])
}
Add(MST_Load,5019026,609,301)
{
MSTControl="asd"
link(onLoadFromStream,204618:doColAction,[])
}
Add(MST_ColAction,204618,658,308)
{
Action=9
Index=-2
MSTControl="asd"
}
Add(FTCG_Tools,1924644,511,259)
{
link(onWrite,7382582:doAdd,[])
link(Data,3489578:String,[(517,250)(419,250)])
}
BEGIN_SDK
Add(EditMultiEx,11560049,21,14)
{
WorkCount=#6:doLoad|0:|
EventCount=#7:onWrite|0:|
DataCount=#4:Data|0:|
Width=686
Height=207
VOffset=49
HOffset=91
link(doLoad,6958772:doEvent1,[])
}
Add(FT_StringToArray,16361172,112,70)
{
link(onLoad,2376352:doLength,[])
link(Data,11560049:Data,[])
}
Add(FT_For,16420516,217,70)
{
Start=1
link(onEvent,2029437:doRead,[])
link(End,2376352:Result,[(223,61)(209,61)(209,110)(174,110)])
}
Add(FT_Length,2376352,168,70)
{
link(onLength,16420516:doFor,[])
link(SrcStr,16361172:Str,[(174,61)(160,61)(160,110)(125,110)])
}
Add(FT_If_else,3788407,336,70)
{
Op2=String( )
link(onTrue,16294596:doDelete,[])
}
Add(ArrayRead,2029437,287,70)
{
link(onRead,3788407:doCompare,[])
link(Array,16361172:Array,[(293,61)(279,61)(279,117)(118,117)])
link(Index,7329230:Var2,[])
}
Add(GetDataEx,7329230,294,42)
{
Angle=3
link(Data,16420516:Position,[(272,47)(272,110)(223,110)])
}
Add(FT_Delete,16294596,406,70)
{
CharCount=1
link(onDelete,3231930:doInsert,[])
link(SrcStr,2519015:Var1,[(412,61)(397,61)(397,110)])
link(Position,14346910:Var2,[])
}
Add(FT_Insert,3231930,462,70)
{
SubStr=";"
link(onInsert,12930628:doWork2,[])
link(Position,14346910:Var3,[(482,47)])
}
Add(GetDataEx,14346910,413,42)
{
Angle=3
link(Data,7329230:Var3,[])
}
Add(FT_Memory,7756321,525,70)
{
}
Add(FT_Hub,6958772,49,63)
{
OutCount=3
link(onEvent1,12930628:doWork1,[(74,69)(74,41)(508,41)])
link(onEvent2,16361172:doLoad,[])
link(onEvent3,6395804:doData,[(102,83)(102,132)])
}
Add(HubEx,12930628,504,70)
{
link(onEvent,7756321:doValue,[])
}
Add(FT_DoData,6395804,525,126)
{
link(onEventData,11560049:onWrite,[(593,132)(593,69)])
link(Data,2519015:Var2,[])
}
Add(GetDataEx,2519015,525,105)
{
link(Data,7756321:Value,[])
}
END_SDK
Add(Charset,14072145,777,259)
{
Type=7
link(onCharset,14915785:doData,[(816,265)(816,251)(711,251)(711,265)])
}
Add(EventFromData,14915785,721,259)
{
link(onEvent,14072145:doCharset,[])
}
Add(DoData,14972792,308,217)
{
Data=Integer(2)
link(onEventData,13615548:doEvent1,[])
}

Плюсы – можно делать практически всё (создавать БД, вставлять таблицы, делать запросы и т.д.), не надо ничего дополнительно устанавливать.
Минусы – непросто парсить файл с результатами запроса если результат- “кривая” таблица (пропущенные места в столбцах, некоторые ячейки содержат null или текст с пробелами).

2. Работа с БД через стороннюю утилиту fbexport.exe http://fbexport.sourceforge.net/manual.html
Add(MainForm,2953706,70,133)
{
Caption="Выгрузка из базы fbexport"
Point(onClose)
link(onCreate,4227353:doEvent1,[])
}
Add(MTStrTbl,380764,588,168)
{
Width=384
Height=136
Align=5
Name="asd"
link(CodePageSet,14915785:GetData,[])
}
Add(Replace,12630103,329,168)
{
SubStr="""
link(onReplace,1239579:doConvert,[])
link(Str,4576143:Text,[])
}
Add(Hub,4227353,133,147)
{
OutCount=3
link(onEvent1,12981371:doString,[(158,153)(158,104)])
link(onEvent2,13739474:doExec,[])
}
Add(WinExec,13739474,231,154)
{
FileName="fbexport.exe"
Mode=0
RunEvent=1
link(onFinished,5719107:doEvent1,[])
link(Params,12981371:FString,[])
}
Add(FileTools,15798208,329,217)
{
FileName="myfile.csv"
}
Add(FormatStr,12981371,238,98)
{
Mask=" -Sc -H localhost -D "%1" -U sysdba -P masterkey -F myfile.csv -Q "%2" -T"
Point(FString)
link(Str1,6740905:Text,[])
link(Str2,11672865:Text,[])
}
Add(VisualStrings,6740905,238,21)
{
Lines=#67:c:\Users\Public\Desktop\Examples_with_Firebird_database\TEST_DB.FDB|
Width=403
}
Add(VisualStrings,11672865,245,49)
{
Lines=#26:select * from "TBL_ANIMAL"|
Width=172
}
Add(InfoTip,5707855,735,21)
{
Info=#43:http://fbexport.sourceforge.net/manual.html|
Width=260
Height=18
}
Add(MST_Load,7560086,434,161)
{
FileName="myfile.csv"
Delimiter=","
MSTControl="asd"
link(onLoadFromStream,2285484:doColAction,[])
}
Add(MST_ColAction,2285484,483,168)
{
Action=9
Index=-2
MSTControl="asd"
}
Add(StrList,4576143,329,105)
{
FileName="myfile.csv"
Point(doLoad)
}
Add(Hub,5719107,280,161)
{
OutCount=3
link(onEvent1,4576143:doLoad,[(305,167)(305,139)])
link(onEvent2,12630103:doReplace,[])
link(onEvent3,15798208:doDelete,[(319,181)(319,237)])
}
Add(StreamConvertor,1239579,385,168)
{
Mode=7
link(onResult,7560086:doLoadFromStream,[])
}
Add(Charset,14072145,644,112)
{
Type=7
link(onCharset,14915785:doData,[(683,118)(683,104)(578,104)(578,118)])
}
Add(EventFromData,14915785,588,112)
{
link(onEvent,14072145:doCharset,[])
}

(Схема обрезается, смотрите в архиве.)

Плюсы – выходной файл-готовый CSV, можно получить sql для вставки в другие базы данных.
Минусы – поддерживает Firebird до 2.1 версии, сторонняя утилита

3. Работа с БД через ODBC драйвер и VBJScript. https://www.firebirdsql.org/en/odbc-driver/
Add(FormatStr,1568770,147,266)
{
DataCount=3
Mask="Dim objConn, objRecordset, objColumns \r\n\r\n'sys.onClear nil\r\n\r\nSet objConn = CreateObject("ADODB.Connection")\r\nobjConn.ConnectionString = "Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=localhost:%1;"\r\nobjConn.ConnectionTimeOut = 15\r\nobjConn.CommandTimeout = 30\r\nobjConn.Open\r\n\r\n'Set objRecordset = objConn.Execute("%3",,2)\r\nSet objRecordset = objConn.Execute("%2")\r\nSet objColumns = objConn.OpenSchema(4, Array(Empty,Empty, "%3"))\r\n\r\n'Перебираем название столбцов\r\nWhile Not objColumns.EOF\r\n sys.onColNames Trim(objColumns.Fields(3))\r\n objColumns.MoveNext\r\nWend\r\n\r\n'Set objColumns = objConn.Execute("select rdb$field_name from rdb$relation_fields where rdb$relation_name='%3' order by rdb$field_position",,1)\r\n'While Not objColumns.EOF\r\n' sys.onColNames objColumns.Fields(0).Value\r\n' objColumns.MoveNext\r\n'Wend\r\n\r\n'Перебираем результаты запроса\r\nWhile Not objRecordset.EOF\r\n strRes = vbNullString\r\n For i=0 To objRecordset.Fields.Count-1\r\n strRes = strRes & objRecordset.Fields(i).Value & vbTab\r\n Next\r\n sys.onQuery strRes\r\n objRecordset.MoveNext\r\nWend\r\n\r\nsys.onEnd nil\r\n\r\n'objRecordset.Save "test.xml", 1\r\n\r\nobjConn.Close\r\nSet objConn = Nothing\r\nSet objColumns = Nothing\r\nSet objRecordset = Nothing\r\n\r\n\r\n "
link(onFString,224191:##SetScript,[])
link(Str1,6740905:Text,[])
link(Str2,11672865:Text,[])
link(Str3,4385306:Text,[])
}
Add(MainForm,2953706,77,252)
{
Width=827
Height=431
Caption="Выгрузка из базы ODBC"
link(onCreate,1568770:doString,[])
}
Add(VisualStrings,6740905,147,133)
{
Lines=#67:c:\Users\Public\Desktop\Examples_with_Firebird_database\TEST_DB.FDB|
Width=375
}
Add(VisualStrings,11672865,154,161)
{
Lines=#24:select * from TBL_ANIMAL|
Width=172
}
Add(InfoTip,5707855,651,119)
{
Info=#51:http://www.ibphoenix.com/download/connectivity/odbc|3:или|43:https://www.firebirdsql.org/en/odbc-driver/|0:|
Width=379
Height=46
}
Add(VBJScript,224191,203,266)
{
WorkPoints=#11:##SetScript|
EventPoints=#7:onQuery|10:onColNames|5:onEnd|
Script=#0:|0:|
UseName=0
link(onQuery,7153700:doMT,[])
link(onColNames,7431476:doMT,[(263,279)(263,314)])
link(onEnd,7840295:doColAction,[(256,286)(256,349)])
}
Add(VisualStrings,4385306,161,189)
{
Lines=#10:TBL_ANIMAL|
Width=165
}
Add(MTStrTbl,10873068,448,259)
{
Left=60
Top=210
Width=660
Align=5
Name="asd"
link(CodePageSet,14915785:GetData,[])
}
Add(MST_DB,8691268,329,259)
{
MSTControl="asd"
}
Add(Charset,14072145,504,210)
{
Type=7
link(onCharset,14915785:doData,[(543,216)(543,202)(438,202)(438,216)])
}
Add(EventFromData,14915785,448,210)
{
link(onEvent,14072145:doCharset,[])
}
Add(MT_String,7153700,273,259)
{
Delimeter="\t"
link(onResult,8691268:doAddRow,[])
}
Add(MT_String,7431476,273,301)
{
Delimeter="\t"
link(onResult,8691268:doAddCols,[(312,307)(312,272)])
}
Add(MST_ColAction,7840295,273,343)
{
Action=9
Index=-2
MSTControl="asd"
}

Плюсы – никаких внешних файлов
Минусы – для работы нужен установленный ODBC драйвер

Все схемы были проверены на локальном сервере Firebird 2.0 и на Windows 10 64.
Архив с примерами и тестовой базой https://forum.hiasm.com/getfile/39171

Редактировалось 4 раз(а), последний 2020-11-19 10:01:18
карма: 3

0
файлы: 1Examples_with_Firebird_database.zip [275.9KB] [6]
20
Сообщение
...
Прикрепленные файлы
(файлы не залиты)