![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi & ADO [D7, dBase, FoxPro]
Postalll © (2006-07-10 14:39:00)Проблема такая: при открытии БД с помощью ADO мне надо знать тип каждого поля и фактический размер записи в этом поле. Т.е если это поле Double, то мне надо знать, какова длина числа этого поля в файле DBF. Не знаю, какой метод использовать (.DataSiza не подходит - он возвращает размер типа Double - 8b). Заранее благодарен :)
Postalll (2006-07-11 16:37:00) [1]Я разобрался - хорошо работает метод:
Query.Recordset.Fields[i].Precision - он определяет истинный размер нужного вам (i) поля.
Desdechado (2006-07-10 16:03:00) [2]если для закачки, то зачем читать через адо?
заголовок файла доступен [1]
Postalll (2006-07-10 15:09:00) [3]Фишка в том, чтобы определить эту длину не с помощью SQL скрипта, а из Delphi, используя ADO для открытия БД.
Эта длина мне нужна для создания CTL файла, чтобы переместить данные из DBF в таблицу Oracle утилитой SQL Loader.
Ega23 (2006-07-10 14:59:00) [4]И вообще:
declare @X float
Set @X=1.0000000000000000000000000000000001
Select X=Cast(@X as varchar(1000))
Result:
X
------------------
1
(1 row(s) affected)
Ega23 (2006-07-10 14:56:00) [5]
> Вот и вопрос: как эту длину определить?
Никак. Если это строка, то и бери строку.
Postalll (2006-07-10 14:54:00) [6]Это то все верно :), но число в DBF можел храниться и в таком виде:
000004.3452, т.е. занимает 11 символов. Вот и вопрос: как эту длину определить?
Ega23 (2006-07-10 14:51:00) [7]Double всегда 8 байт, хоть убейся.
Sam Stone (2006-07-10 14:46:00) [8]Если поле Double, то под него всегда выделяется 8 байт. Если длины в датасете и базе отличаются то как-то это странно... Единственное глупое решение, пришедшее на ум - прочитать заголовок файла и вытащить длину нужного поля. Формат фокспрошной базы есть в гугле. Хотя решение жутко кривое и не претендует на первое место :)