--- title: "OpenTextFile - Открыть текстовый файл запросов" type: guide api: [api7] tags: [guide, api7, opentextfile] sources: - opentextfile.html --- *API экспортных функций > Функции работы с прикладной библиотекой  > Функции работы с базами данных * ## OpenTextFile - Открыть текстовый файл запросов Пример... Аналог данной функции при использовании Automation - метод ksDataBaseObject::ksOpenTextFile. Синтаксис: ``` reference OpenTextFile(char * fileName); Входной параметр: fileName - имя файла. Возвращаемое значение: указатель на открытый файл - в случае успешного завершения, 0 - в случае неудачи. ``` Примечание: 1. Функция работает по правилам стандартной процедуры WINDOWS OpenFile. 2. Реализованные в рамках данного раздела функции работы с текстовыми файлами обеспечивают их построчную обработку и позволяют вынести обращения к базе данных во внешний текстовый файл. Это дает возможность работать с разными платформами СУБД без изменения выполняемого кода приложения. 3. При использовании Unicode следует использовать функцию OpenTextFileW. ## OpenTextFile, CloseTextFile, ReadStrFromTextFile- пример использования //////////////////////////////////////////////////////////////////////// //пример текстового файла 1.loa 10.0 100 1 15.0 80 2 20.0 120 1 //////////////////////////////////////////////////////////////////////// //пример текстового файла запросов 11.txt привязанный к файлу 1.loa 1:TXT_DB 2:1.loa 3:1 2 3 4:a=%.1f ////////////////////////////////////////////////////////////////////////// //пример текстового файла запросов 12.txt привязанный к БД ACCECC c именем // test в ODBC.INI. ODBCSDK должен быть установлен на ПК 1:ODBC_DB 2:test 3:select a,b,t from table1 4:where a=%.1f ////////////////////////////////////////////////////////////////////////// #ifndef __LIBTOOL_H #include #endif #ifndef __LIBDB_H #include #endif void DrawRect (void) { char buf[40], s[128]; struct { double a; double b; int t; } r; reference f = OpenTextFile("11.txt"); if (EditMacroMode()) //режим редактирования GetMacroParam(&r, sizeof(r)); else { //cоздание нового макроэлемента r.a = 20; r.b = 10; } // считали тип БД - "TXT_DB" if (!ReadStrFromTextFile(f,buf,1)) {Error("Ошибка"); return; } reference bd = CreateDB (buf); // считали имя БД - "1.loa" if (!ReadStrFromTextFile(f,buf,2)) {Error("Ошибка"); return; } ConnectDB(bd, buf); //задаем отношение reference r1 = Relation(bd); RDouble ("a"); RDouble ("b"); RInt (""); EndRelation(); //считывать все колонки "1 2 3" if (!ReadStrFromTextFile(f,buf,3)) {Error("Ошибка"); return; } DoStatement(bd, r1, buf); ReadDouble("задайте ширину",r.a,0,100, &r.a); //считать условие "a=%.1f" if (!ReadStrFromTextFile(f,buf,4)) {Error("Ошибка"); return; } sprintf (s, buf,r.a); // условие например a=10.0 Condition(bd, r1, s); if (ReadRecord(bd, r1, &r)) { reference m = Macro(); LineSeg(0, 0, r.a, 0, r.t); LineSeg(r.a, 0, r.a, r.b, r.t); LineSeg(r.a, r.b, 0, r.b, r.t); LineSeg(0, r.b, 0, 0, r.t); EndObj(); //записать параметры в макроэлемент SetMacroParam( m, &r, sizeof(r), NULL, NULL, -1); } else Error("прямоугольник с такими параметрами не найден в БД"); DeleteDB(bd); CloseTextFile(f); }; /* OpenTextFile */