Форум: "Базы";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизСоздание таблицы DBASE IV. Что посоветуете использовать? Найти похожие ветки
← →
SergP © (2004-11-13 00:56) [0]Такая проблема:
Пишу некий софт, в котором использую БД Access (из-за удобства доступа через ADO), к тому же там не требуется "серьезных" СУБД.
теперь мне нужно сделать возможность экспорта данных в таблицу dbase 4 (foxpro 2.6)
Таблица должна быть заранее определенной структуры. Программа должна создать ее, поместить туда данные и записать полученный файл на диск (например на дискету). Ввиду того что работа с таблицей идет только на запись, и чтобы уменьшить кол-во проблем, использовать BDE я не буду (это себя не оправдывает).
На данный момент у меня есть только одна мысль: вручную создать файл чтобы он соответствовал таблице dbase 4 нужной структуры.
Но на всякий случай хочу спросить: может кто-нить сталкивался с подобной ситуацией? Что можете посоветовать? Может есть какие-нить не тяжелые библиотеки позволяющие создать нужную таблицу, и записать туда данные? А то не очень хочется искать описание формата dbf файлов и создавать вручную файл по его "образу и подобию".
← →
sniknik © (2004-11-13 01:19) [1]> в котором использую БД Access (из-за удобства доступа через ADO)
вот его и используй
попробуй запрос из подключения к аксесу
SELECT * INTO Table1 IN "D:\" "dBase IV;" FROM Table1
← →
SergP © (2004-11-13 01:26) [2]
> [1] sniknik © (13.11.04 01:19)
> > в котором использую БД Access (из-за удобства доступа
> через ADO)
> вот его и используй
> попробуй запрос из подключения к аксесу
> SELECT * INTO Table1 IN "D:\" "dBase IV;" FROM Table1
Хм... Спасибо...Довольно просто оказывается... Хотя я пока еще не пробовал. А без BDE работать будет? А то где-то вроде бы на форуме читал что если на запись то BDE нужно.
← →
sniknik © (2004-11-13 01:39) [3]для парадокса да нужно, для dBase ... ну попробуеш скажеш ;о)), всегда хотел проверить да лень было.
если так логически, писатся должно и без BDE, но какаянибудь хрень (в виде неподдержки индексов например, вылезти может)
на самом деле без BDE оно не обходится, просто jet имеет урезанный встроенный в себя кусок (dll) того же BDE который и использует при отсутствии, а в случае установленности нормального использует его (получается нет глюков от 2х одновременно работающих копий, какие обычно бывают у некоторых любителей кипирования dll ;о))
← →
SergP © (2004-11-13 01:40) [4]Попробовал только-что. Работает.
Только вот структуру таблицы как задать? Например у меня в акцессе поле денежное, а в dbase 4 нужно N 20,4, а в результате запроса получается N 20,5, еще некоторые текстовые поля нужно "урезать" по кол-ву символов.
Как это сделать?
также остается вопрос: Нужно ли для этого BDE, или программа будет работать и без него? Сейчас не могу проверить так как у меня нет компа чтобы без установленной BDE был.
← →
sniknik © (2004-11-13 11:23) [5]> нужно N 20,4
> еще некоторые текстовые поля нужно "урезать" по кол-ву символов.
проще будет наверное каким нибудь движком компонентным воспользоваься (Halcyon например), потому как с размерами полей при создании таблиц у джета проблема. (поле decimal(6,2) к примеру им сделать проблемно (если вообще возможно), не знаю как)
← →
sniknik © (2004-11-13 11:25) [6]а вот выгрузку в уже готовую таблицу все одно лучше запросом, быстрее. структура при insert-е остается прежней.
← →
KSergey © (2004-11-14 08:18) [7]> [3] sniknik © (13.11.04 01:39)
> jet имеет урезанный встроенный в себя кусок (dll) того же BDE
не понял??!!
← →
Anatoly Podgoretsky © (2004-11-14 09:50) [8]А какая буква непонятна?
Микрософт лицензировал у Борланда мини БДЕ для своего движка JET для доступа к dBase таблицам
← →
KSergey © (2004-11-14 09:59) [9]> [8] Anatoly Podgoretsky © (14.11.04 09:50)
Понял, отстал
Ну я эта.. не в курсе был. Не пригласили меня :(
← →
Anatoly Podgoretsky © (2004-11-14 10:09) [10]Посмотри библиотеки 16ричным редактором и все станет ясно.
← →
SergP © (2004-11-14 17:23) [11]Ладно. С этим понятно... Если что, то попробую еще вариант с уже имеющейся готовой таблицей (dbf) с уже нужной структурой. А потом добавить в нее записи запросом... Будет ли при этом нужна BDE?
И еще: в выходной таблице должно быть поле с номером строки. Насчет того зачем оно нужно и нужно ли вообще - не спрашивайте. Просто мне нужно сделать чтобы моя программа формировала dbf файл нужной структуры (а структуру не я придумывал).
Вобщем в FOXPRO можно сделать такой запрос:
select recno() as row,* from table1 into dbf table2
А можно ли сделать что-то подобное юзая JET?
> [5] sniknik © (13.11.04 11:23)
> проще будет наверное каким нибудь движком компонентным воспользоваься
> (Halcyon например), потому как с размерами полей при создании
> таблиц у джета проблема. (поле decimal(6,2) к примеру им
> сделать проблемно (если вообще возможно), не знаю как)
т.е. проблема только с decimal(6,2) или со всеми остальными?
если хоть некоторые типы полей результата в запросе можно задавать, то подскажите как это делать в запросе или приведите примерчик пожалуйста.
А Halcyon юзать - это значительно увеличивать размер программы из-за такой мелочи как мне нужна. Т.е это как стрелять по воробьям из пушки.
Мне уже проще будет "вручную" создавать файл нужной структуры. Пример нужного файла у меня есть. Возьму заголовок и описание полей оттуда, (в заголовке только придется поменять байты, в которых записано кол-во записей.) Потом добавлю данные и запишу результат в файл.
← →
sniknik © (2004-11-14 17:53) [12]> т.е. проблема только с decimal(6,2) или со всеми остальными?
со всеми числовыми, точность не задается, по умолчанию или 20,5 или 19,5 получается. но какието вариации срабатывают (12,2 вроде бы получалось), в общем нестабильно, не стоит использовать.
← →
SergP © (2004-11-14 18:07) [13]
> [12] sniknik © (14.11.04 17:53)
> > т.е. проблема только с decimal(6,2) или со всеми остальными?
> со всеми числовыми, точность не задается, по умолчанию или
> 20,5 или 19,5 получается. но какието вариации срабатывают
> (12,2 вроде бы получалось), в общем нестабильно, не стоит
> использовать.
Плиз, приведи пример использования задания формата поля в самом запросе?
← →
sniknik © (2004-11-14 20:10) [14]> Плиз, приведи пример использования задания формата поля в самом запросе?
зачем? все одно не получится.
ну если так хочется, проверь
CREATE TABLE Table1 (ID INT, ID1 decimal(6, 2), ID2 decimal(16, 2), ID2 decimal(12, 2))
при подключении через jet к dBase IV будет весде 20,5.
после замени на numeric, и т.д.
← →
SergP © (2004-11-14 23:49) [15]
> [3] sniknik © (13.11.04 01:39)
> для парадокса да нужно, для dBase ... ну попробуеш скажеш
> ;о)), всегда хотел проверить да лень было.
Попробовал у товарища дома, где BDE нет. Работает. Так что BDE оказівается не нужна.
> [14] sniknik © (14.11.04 20:10)
> > Плиз, приведи пример использования задания формата поля
> в самом запросе?
> зачем? все одно не получится.
>
> ну если так хочется, проверь
> CREATE TABLE Table1 (ID INT, ID1 decimal(6, 2), ID2 decimal(16,
> 2), ID2 decimal(12, 2))
> при подключении через jet к dBase IV будет весде 20,5.
> после замени на numeric, и т.д.
Я имел ввиду запрос не Create , а Select ... into Table IN "..." "dBase IV... Как в таком случае поменять формат поля? Например в базе access одного типа и формата, а в результате чтобы в dbf оно біло уже другого формата ? Или в select такого указывать нельзя?
← →
sniknik © (2004-11-15 00:54) [16]> Или в select такого указывать нельзя?
можно но ограничено, и только типа формат ты вряд ли измениш, приведения типа какие позволительны то и возможно, так строку к числу привести пожалуйста а вот точность ему задать... нет. и если вычисления со строками будеш использовать то поле в котором оно используется получит тип char(254), вродебы, и т.д. (сам проверь).
для точной структуры ее нужно иметь, говорил уже.
← →
Galim (2004-11-15 07:07) [17]А ты пробавал через ADO паковать DBF-файлы.
Может кто-подскажет?
← →
Fay © (2004-11-15 08:46) [18]VkDbf
← →
SergP © (2004-11-15 08:47) [19]
> [16] sniknik © (15.11.04 00:54)
Я имел ввиду не операции приведения типов, а возможность непосредственного задания типов полей результирующей таблицы.
Нашел правда почитал сегодня в JETSQL40.CHM:
Инструкция SELECT...INTO
...
При создании таблицы поля в новой таблице наследуют типы данных и размеры базовых полей; никакие другие свойства таблиц и полей не передаются.
и понял что такого нет.
Ну да ладно. буду значит через INSERT делать. А создание пустой таблиці уже сделал тупо на основе создания файла с заранее определекнной последовательностью байт. Т.е. не через SQL
← →
Fay © (2004-11-15 08:58) [20]А ваще, если не лениво, можно лепить dbf-файл "руками". Я иногда так и делаю.
← →
SergP © (2004-11-15 20:59) [21]Вобщем пробовал делать таким образом:
Создаю dbf файл с нужной структурой, но без записей,
затем запросом
INSERT INTO mytable IN "C:\" "dBase IV;" select .... from ...where...
заполняю его нужными данными. Все работает, но остались две проблемы:
1. В таблице имеется поле Rownum нужно заполнить его номерами полученных записей. Как это сделать?
2. при выполнении запроса в текстовых полях неправильно происходит перекодировка из виндовской кодировки в досовскую 1251->866, т.е. портятся "украинские" буквы. Например вместо "і" получается символ с кодом $3F. Можно ли как-нить от этого избавиться?
← →
sniknik © (2004-11-15 21:29) [22]2
попробуй, ключ реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage
всего да "понимаемых" значения OEM и ANSI, поменяй одно на другое, не поможет значит нельзя.
1
тутже переподключайся к созданной таблице через ODBC Visual FoxPro Driver и делай UPDATE mytable SET Rownum = RecNo(), он понимает номер строк.
← →
Slym (2004-11-16 12:56) [23]Есть DBF компоненты! Например TDBF (www.tdbf.net или tdbf.sf.net)
Понимают любую кодировку и тип.
1. Создай пустые таблицы, затем их в ресурс. При выгрузке сохраняешь ресурсы куда надо, цепляешся к ним и построчно перегоняешь инфу.
2. Design тайме забей в DBF структуру таблицы и CreateTable.
← →
SergP © (2004-11-16 22:03) [24]
>
> [23] Slym (16.11.04 12:56)
> Есть DBF компоненты! Например TDBF (www.tdbf.net или tdbf.sf.net)
> Понимают любую кодировку и тип.
> 1. Создай пустые таблицы, затем их в ресурс. При выгрузке
> сохраняешь ресурсы куда надо, цепляешся к ним и построчно
> перегоняешь инфу.
> 2. Design тайме забей в DBF структуру таблицы и CreateTable.
Да задолбался возиться с этими мелкими проблемами, уже решил не играться со всем этим а клепать все вручную: Создаю заголовок таблицы, только меняю те четыре байта где кол-во записей указано. А затем добавляю значения всех полей в порядке очередности... Кодировку меняю так же вручную.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.042 c