Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.041 c
3-1100280907
SergP
2004-11-12 20:35
2004.12.12
Как работать с ADO в режиме ltBatchOptimistic?


1-1101592859
Grim
2004-11-28 01:00
2004.12.12
Dynamic arrays и TStream


1-1101398546
Руслан Гиричев
2004-11-25 19:02
2004.12.12
TTreeView и текст строки разными цветами


14-1101127318
Erik1
2004-11-22 15:41
2004.12.12
Как найти какой unit добавляет QR4RunD5 и VirtualTreesD5?


14-1100882555
StellMan
2004-11-19 19:42
2004.12.12
Скока платят модераторам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский