| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Базы данных > ADO||BDE как создать dbf таблицы |
| Автор: Programister0 6.7.2007, 20:34 | ||||
| немогу создать нормальные dbf файлы пробовал пример и bildera с TTable вроде создает таблицу но файла нет
код работает но файла нет! (никогда неповторяюсь неповторяюсь) пробовал с помощью ADO
таблица создается нормально но проблема в числовых полях numeric размером 20,5 необходимо задать размер ЧИСЛОВОГО ПОЛЯ я пробовал : numeric(n,m) numeric(n) - ошибка в запросе ! может изначально ошибка в ConnectionString или опять вернуться к TTable? |
| Автор: mutex 6.7.2007, 22:01 |
| Попробуйте использовать VFP OLE DB Provider (скачайте от Микрософт) и определения полей на языке Visual FoxPro. Строка соединения может выглядеть так: Provider=VFPOLEDB.1;Data Source=C:\DBFTEST\;Mode=ReadWrite;User ID="";Password="";Collating Sequence=MACHINE;DSN="" Определение структуры таблицы (файла TEST.DBF) так: CREATE TABLE TEST ( FCHAR C(20), FNUM N(10,3), FDATE D, FDATETIME T, FINTEGER I, FLOGIC L, FMEMO M(4) ) Этот SQL оператор можно выполнять через метод Execute Вашего соединения. |
| Автор: Данкинг 6.7.2007, 22:43 |
| Да, коннектимся через VFP провайдер, кидаем AdoQuery и в нём пишем запрос на создание таблицы. На дельфи я делал именно так. |
| Автор: mutex 7.7.2007, 11:27 |
| Если на Дельфи код работает, в чем же проблема на Билдере? |
| Автор: Programister0 7.7.2007, 12:17 |
| mutex ты следишь за мной я сразу и недогнал что ты имел ввиду, пока не вспомнил про dat файлы. ответ: нет ни какого кода(ни в делфи не в билдере), в этом я полуторный ЛАМО есть только компоненты из bildera с которыми я немогу разобрваться т.к. компоненты bildera и delphi одинаковы(почти) я искал ответы и в разделе delphi как выбирать записи из dbf это понятно, как получить их из dat незнаю! сейчас проблема была в том как коректно создавать эти самые dbf-ки спасибо за совет с VFP OLE DB Provider все нормально засвистело - теперь числовые поля нужного размера получаются! тема закрыта! еще раз спасибо. |
| Автор: Programister0 7.7.2007, 23:35 |
| блин опять не так, таблицы создаются нормально и поля нужного размера но выбирать и добавлять записи можно ТОЛЬКО с помощью того-же ADOTable и ADOQuaery другие программы либо выдают лишнее поле типа _NullFlags размером 1 и типом соседнего поля либо вообще не открывают TTable работать с такими файлами отказывается говорит типа: "Corrupt table/index header" Ещё скачал компоненты degisy data с помощью DsDBF создавал таблицы которые нормально работают везде, но опять появилась проблема с указанием размера поля (например numeric(8,4)) создаваемой таблицы там размер указывается только для строк! может кто то работал с этим компонентом - как размер прописать? или может в ConnectionString для ADO что то не так я пишу: Provider=VFPOLEDB.1;Data Source=.;Mode=ReadWrite;User ID="";Password="";Collating Sequence=MACHINE;DSN="" |
| Автор: mutex 8.7.2007, 14:02 |
| Чтобы не было поля _NullFlags, попробуйте добавить фразу "NOT NULL" (без кавычек) в определениях строковых полей - типа "C" (Character). TTable использует BDE. BDE не умеет распознавать DBF-файлы, имеющие VFP-формат. ADO считается более продвинутой технологией, чем устаревший BDE. Следовательно, работайте спокойно через ADO. Можете в ADO ConnectionString попробовать изменить параметр Collating Sequence на: Collating Sequence=RUSSIAN если только VFP-провайдер найдет русскую последовательность сортировки. Это должно дать независимость от регистра-высоты кириллических букв. PS. Чем же не устраивает TADODataset? Если что непонятно, спросите. PPS. Я не встречал ни одного готового компонента, который корректно работает с кириллическими индексами, а также предоставляет возможность полного управления DBF-файлами. |
| Автор: Programister0 8.7.2007, 15:41 |
| В ADO простой запрос SELECT * FROM TB где в TB ~30,000 записей выполняется 0,3 сек. в DBE тоже самое за 0,2 сек. а есть таблицы где ещё больше записей (но там нет счетчика т.к. редко загр-ся) ещё драйвер ado какойто работает от в зависимости от "погоды" то нормально то "cannot load driver" перезапускаю проект опять нормально. и видимо этот VFP OLE DB Provider должен быть на машинах где будут использоваться его dbf-ки, что возможно будет накладно. |
| Автор: mutex 8.7.2007, 18:45 |
| С оптимизацией, конечно, надо разбираться. По умолчанию ADO просчитывает всю таблицу сразу в память. Поэкспериментируйте свойствами BlockReadSize, CacheSize и MaxRecords. Видимо, BDE читает только начальные записи таблицы, чтобы заполнить сетку-грид, а потом делает подкачку по необходимости. Кстати, если хотите остаться в среде BDE, воспользуйтесь компонентами Halcyon, где можно создавать DBF-файлы для Dbase3 или Dbase4. Провайдер VFP надо ставить везде, но BDE - тоже ведь надо. Причем размеры BDE больше. > то "cannot load driver" перезапускаю проект опять нормально Что-то установлено криво. Переустановите MDAC и VFP провайдер. В моей практике провайдер пока что не подводил меня. |
| Автор: Programister0 8.7.2007, 18:55 |
| действительно если прописывать not null для всех полей _NullFlags пропадает и TTable нормально с ними работает, благодарю за совет. и на счет BDE тоже верно ща буду эксперементировать со скоростью ADO может тогда все компоненты и поменяю. |
| Автор: Programister0 8.7.2007, 20:43 |
| нет ADO однозначно медленнее BDE. компоненты Halcyon - для Buildera я не нашел, только для делфи! если есть такие дай ссылочку. |
| Автор: mutex 8.7.2007, 21:34 |
| Halcyon сделан на Паскале. Но, он должен установиться под Билдером. У Вас какая версия Билдера? |
| Автор: Programister0 8.7.2007, 21:58 |
| BCB 6 скачал hlcn696 пробовал ставить он требует package а там вообще нет файлов с расширением bpk. пробовал чегото самостоятельно наваять невыходит. |
| Автор: mutex 9.7.2007, 18:17 |
| И сдался же этот Блиндер. Попробуйте так: 1. создать пакет *.bpk (меню File/New/Other потом package) 2. сохранить его под именем Halcyuon6 2. включить туда все *.pas файлы из Дельфийского dpk-файла 3. в опциях проекта пакета отключить все флаги из Pascal/Messages 4. добавить путь $(BCB)\Source\ToolsApi в Library Path через Tools/Environment Options/Library |
| Автор: Programister0 12.7.2007, 16:56 |
| спасибо mutex, с твоей помощью и терпением удалось установить компонент. извиняюсь за долгое молчание - трафик кончился. вообще щас вроде с ADO подружился теперь там ковыряюсь т.к. мне кажется там можно более сложные запросы выполнять чем в BDE. |