Головна сторінка
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 можна зробити такий запит:
вибрати 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.67 MB
Час: 0.072 c
14-1100092294
gn
2004-11-10 16:11
2004.12.12
Linux сама небезпечна операційна система в світі!


4-1097751044
Руслан
2004-10-14 14:50
2004.12.12
Питання про АЦП


6-1094570963
Ркм
2004-09-07 19:29
2004.12.12
Мережа


1-1101804989
Серж_Евдокімов
2004-11-30 11:56
2004.12.12
Програмно вибрати папку в ShellTreeView ..


14-1101226867
syte_ser78
2004-11-23 19:21
2004.12.12
Тюльпан з паперу





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська