Сделал несколько примеров работы с базой данных 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.htmlAdd(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
|