Форум: "Базы";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
ВнизЧтение информации из dbf Найти похожие ветки
← →
Делфенок (2005-05-18 20:23) [0]Добрый день. Какими средствами (ADO, специальные компоненты и т.д.) лучше всего пользоваться, чтобы прочесть информацию в список из любого поля dbf. Ориентировочно эта тема уже поднималась, но конечного ответа я так и не нашел. И еще, если все-таки пользоваться ADO, то какого поставщика выбирать OLE DB или Jet (советуют второе, но почему?). Заранее спасибо.
← →
Делфенок (2005-05-18 20:35) [1]Причем хотелось бы, чтобы пользователь ничего не доставлял, не прописывал на машине и т.д. Спасибо
← →
Anatoly Podgoretsky © (2005-05-18 22:33) [2]Только встроеный в программу движок не потребует ничего доставлять, в остальных случаях дело случая.
В последнии версии АДО не входит JET, да и само АДО может не стоять на компьютере, если рассматривать все ОС.
← →
Делфенок (2005-05-19 09:15) [3]А что вы скажете о компоненте типа TDBF? Имеются ли какие-то ограничения в его использовании?
← →
ANB © (2005-05-19 09:21) [4]У меня есть компонент для прямого доступа к DBF.
Минусы :
- писал сам и отлаживал только те куски, которые реально были нужны
- это не дэйтасет, иммитация работы как в DBase III+(FoxPro, Clipper)
- индексы я не юзаю
- немного подрезал ограничения - Memo ест только до 65К, остальное игнорит.
Плюс - читает всегда, в оригинальной кодировке (есть функция перкодирования DOS -> Win) и иногда лучше, чем через драйвер.
Могу выслать.
← →
Anatoly Podgoretsky © (2005-05-19 09:33) [5]Делфенок (19.05.05 09:15) [3]
Именно про подобное и говорю.
Про TDbf - ничего движок, единственный недостаток, глюкавый.
← →
Делфенок (2005-05-19 09:34) [6]To ANB
Буду благодарен friend@fromru.com
To Anatoly Podgoretsky: чем глюкавый?
← →
Делфенок (2005-05-19 09:48) [7]To Anatoly Podgoretsky а вы могли бы посоветовать неглюкавый компонент? Мне в принципе не "глобальную" задачу решать нужно... В ComboBox и Grid выгрузить информацию из Dbf. С этим компонент этот справится?
← →
Anatoly Podgoretsky © (2005-05-19 09:56) [8]С указаной задачей, если dbf это dBase, справится. Проблемы касаются работы с индексами, некоторая порча таблиц базы данных, в части RecordCount (по крайней мере при большом количестве записей), отсутствия индекса. То есть использовать можно если знаешь конкретные слабые места. Не пытайся использовать для FoxPro, Clipper
← →
Anatoly Podgoretsky © (2005-05-19 09:57) [9]Делфенок (19.05.05 09:48) [7]
Можешь и dbGrid использовать
← →
Делфенок (2005-05-19 10:12) [10]To Anatoly Podgoretsky
<...некоторая порча таблиц базы данных
порча при записи, надеюсь?... при чтении из файла порча не обнаруживается?...
< Не пытайся использовать для FoxPro, Clipper
да, файлы dBase - я их собственно из Excel-файлов делаю... сохраняю просто в dbf
← →
Anatoly Podgoretsky © (2005-05-19 10:16) [11]Делфенок (19.05.05 10:12) [10]
Порча при добавлении, таблица ремонту не подлежит, но работать все равно можно.
В твоем случае наверно это будет лучшее решение, полная независимость, ошибки если не будешь использовать RecordCount проявляться не будут, к тому же нет никаких индексов. По сути это будет формат dBase III
← →
ANB © (2005-05-19 10:43) [12]Уже послал. Кстати, у меня ест формат FoxPro.
← →
Делфенок (2005-05-19 10:51) [13]тоесть мне лучше сохранять в формат dBase III?
а по поводу TDbf dBase Access v.6.20 ничего сказать не можете?
← →
Yurij-7 (2005-05-19 10:54) [14]А почему бы неиспользоваать halcyon ?
← →
evvcom © (2005-05-19 11:03) [15]Чего же все-таки все так BDE боятся? За столько версий уже, наверное, все глюки вывели. Ставится тоже довольно просто: regsvr32 BdeInst.dll. И в Delphi BDE-компоненты с самого начала под него заточены и тоже давно отлажены.
← →
ANB © (2005-05-19 11:17) [16]
> evvcom © (19.05.05 11:03) [15]
- маленький скромный вопросик, что приезжает в дэйтасет, если в DBF в поле дата - пусто (пробелы) ?
← →
Anatoly Podgoretsky © (2005-05-19 11:25) [17]Делфенок (19.05.05 10:51) [13]
Лучше dBase IV
evvcom © (19.05.05 11:03) [15]
По его задаче, ему достаточно такого простого движка.
← →
Anatoly Podgoretsky © (2005-05-19 11:26) [18]У него по сути только импорт из базы, сама работа с базами не требуется.
← →
Делфенок (2005-05-19 11:43) [19]To ANB:
Спасибо большое!
To evvcom:
да не боятся, просто зачем использовать дополнительные настройки, когда непродвинутые юзеры разных городов будут это использовать... сколько мне долбаться с ними нужно будет. это раз и два - см. :
Anatoly Podgoretsky © (19.05.05 11:25) [17]
evvcom © (19.05.05 11:03) [15]
По его задаче, ему достаточно такого простого движка.
-----------------------------------------------------------------
Anatoly Podgoretsky © (19.05.05 11:26) [18]
У него по сути только импорт из базы, сама работа с базами не требуется.
To Yurij-7:
можете назать его преимущества над аналогами?
To Anatoly Podgoretsky:
фильтра в компоненте TDBF нет, тогда, чтобы какую-то выборку сделать, ме нужно все записи пересматривать, тогда RecordCount, как я понимаю, мне нужно будет использовать?...
← →
ANB © (2005-05-19 11:54) [20]
> фильтра в компоненте TDBF нет, тогда, чтобы какую-то выборку
> сделать
- млин, у меня тоже нет. А просматривать все записи - не кошерно, индекс бы прикрутить.
← →
Yurij-7 (2005-05-19 12:16) [21]Делфенок
Все преимущества и неподскажу так как сам с ним работал только 1 раз, но это полноценный компонент обеспечивающий прямой доступ к dBase файлам, поддержка индексов, фильтр....
Сам работаю через BDE, меня устраивает, но Халькион лучше использовать если непланируете на машине устанавливать БДЕ.
← →
Anatoly Podgoretsky © (2005-05-19 12:18) [22]Остановить и начать с начала, с толкования этого "чтобы прочесть информацию в список из любого поля dbf", и другие важные моменты.
А то получается сначала это, потом вдруг вощникают фильтры, а в конце появится и DbGrid, сортировка и процее.
Мини ТЗ в студию.
← →
evvcom © (2005-05-19 12:29) [23]
> - маленький скромный вопросик, что приезжает в дэйтасет,
> если в DBF в поле дата - пусто (пробелы) ?
По моему null и приезжает. Проверка TField.IsNull спасет.
← →
Делфенок (2005-05-19 12:39) [24]Мини Тз в студии :-)
Есть две таблицы dbf, в которых содержится справочная информация, необходимая в дальнейшем пользователю.
На форме планируется размещение Comboboxов, в которые эта информация будет выгружаться, но суть в том (это касаемо фильтров), что воксы взаимосвязаны - как только выбирается запись в первом боксе, автоматом во втором появляется только часть инфы из dbf, тоесть отфильтровали типа.
После этих действий потльзователь будет набивать необходимую ему информацию с помощью какой-нить формы, в которой будет снова бокс, ссылающийся на другую dbf-таблицу. Все это дело - набитая инфа - будет отображаться в гриде, но не сохраняться пока нигде! После всей этой мороки пользователю нужно сгенерить текстовый файл определенной структуры, в котором будет вся инфа, отображенная на данный момент в гриде. И на этом все. Никаких сохранений в dbf и т.д.
Уф-ф-ф :-)
Надеюсь хоть что-то понятно из моего бестолкового рассказа...
← →
alex_*** (2005-05-19 12:42) [25]у меня была задача чтения отчетности из DBF. Пробовал АДО, 1- медленно, 2- для файлов VFoxPro пришлось отдельно обновлять DLL для ODBC. На торри нашел компонент TVKDBFNTX. Читает влет (писать не пробовал). Один мелкий недочет нашел, а так работает как часы. Миллион записей читает за 5-7 сек., насколько помню
← →
Делфенок (2005-05-19 12:54) [26]To alex_*** :
Какой недочет? для моей задачи подойдет?
а TDbf dBase Access v.6.20, любая версия, кто-нить пробовал?
← →
alex_*** (2005-05-19 13:49) [27]TDBf файлы VFoхPro не читает, по-моему
← →
Делфенок (2005-05-19 13:53) [28]Где вы други мои?...
← →
ANB © (2005-05-19 14:19) [29]
> evvcom © (19.05.05 12:29) [23]
- аж 2 раза. Приезжает 31.12.1899. null в DBF нету.
← →
Anatoly Podgoretsky © (2005-05-19 14:22) [30]ANB © (19.05.05 14:19) [29]
Да что ты говоришь
← →
ANB © (2005-05-19 14:58) [31]
> Делфенок (19.05.05 12:39) [24]
- связка мастер-детал, дэйтасетик бы здесь и индексы. Все бы мухой само делалось. Может какой другой формат выберешь ?
← →
ANB © (2005-05-19 15:00) [32]
> Anatoly Podgoretsky © (19.05.05 14:22) [30]
- в dBase III+ точно не было, и в FoxPro. Я уже на это раз нарвался, когда надо было переложить данные в MS SQL. Я через ADO законнектился, переложил - и все люди стали мертвыми. :)))
← →
Anatoly Podgoretsky © (2005-05-19 15:07) [33]ANB © (19.05.05 15:00) [32]
Да что ты говоришь
← →
Anatoly Podgoretsky © (2005-05-19 15:08) [34]ANB © (19.05.05 15:00) [32]
Не сваливай свои ошибки на системы программирования.
← →
ANB © (2005-05-19 15:10) [35]Да сам попробуй - возьми DBF от FoxPro с пустыми датами, подключись через ADO и посмотри в гриде. Да и не было понятия null ни в фоксе ни в клиппере.
← →
Делфенок (2005-05-19 15:12) [36]To Anatoly Podgoretsky:
вы просили мини тз, а выслал, а результат?... ваш ответ?...
← →
sniknik © (2005-05-19 16:37) [37]> Да сам попробуй - возьми DBF от FoxPro с пустыми датами, подключись через ADO и посмотри в гриде. Да и не было понятия null ни в фоксе ни в клиппере.
ну и что, что не было? они дату в строке держат и пустая дата = пустая строка. дальше зависит от движки кто как интерпретирует Jet(в паре с BDE) к примеру пререводит это состояние в null, даже запросы с WHERE DAT IS NULL работают правильно.
а ты скорее всего через драйвер VFP работал, который из пустой строки 0 "делает", а дальше он уже пошол как дата т.к. дата и ожидается.
недоработка фоксового драйвера (имхо), не исправляют похоже специально, у них много таких(с индексами. созданием еще к примеру)... а в самой среде фокса все нормально...
← →
Anatoly Podgoretsky © (2005-05-19 16:40) [38]Делфенок (19.05.05 15:12) [36]
А ничего, смутно написано. Советы ты получил.
sniknik © (19.05.05 16:37) [37]
Больше, даже фильтр должен работать Fld = NULL
← →
ANB © (2005-05-19 16:53) [39]
> а ты скорее всего через драйвер VFP работал, который из
> пустой строки 0 "делает", а дальше он уже пошол как дата
> т.к. дата и ожидается
- точно. Я через ADO коннектился, и юзал драйвер VFP. БДЕ низзя было использовать, так как потом бы никто не смог развернуть. Хотя через АДО еще хуже вышло, проще было инсталляшку написать :))) И в таком, как у меня, виде работал только Empty(Fld).
← →
ANB © (2005-05-19 16:55) [40]
> они дату в строке держат и пустая дата = пустая строка
- ну да, я строки и достаю напрямую из dbf. Кстати, просто читатель не так уж и тяжело пишется. Для ДБФ + МЕМО я писал 3 дня в расслабухе, ну индексы еще можно за 1-6 дней подрубить. Там другое хуже - индексы могут быть разных форматов.
← →
Yurisimus (2005-06-02 09:04) [41]Я тут натолкнулся на следующий глюк в компоненте TDBF - не могу создать поле типа Float, у него не прописываются Precision и Size, а если без них прописывать, то создается слишком большое число 18 сайз и после запятой 9 знаков, жуть... А мне надо для цены использовать всего лишь float(5,2)... Какие есть нормальные компоненты для работы с *.dbf-ками??? Именно интересует следующие функции:
1) Создание таблицы
2) Создание индексного файла
3) Ну и поддержка хотябы 3 видов полей - string,integer и float
Если кто знает такой компонентик плиз подскажите, а то муторно все это прописывать своими ручками...
← →
Anatoly Podgoretsky © (2005-06-02 09:19) [42]Yurisimus (02.06.05 09:04) [41]
Кто же для денег использует Float :-)
Это надо себя очень не любить.
Float в xBase применяется для очень больших (свыше 18/20 знаков) или малых чисел.
Сам TDbf очень глюкавый компонент, применение оправдано только для простых Embeded систем.
← →
Anatoly Podgoretsky © (2005-06-02 09:20) [43]Одна из серьезных проблем это порча таблиц, нарушение стуктуры базы.
← →
ANB © (2005-06-02 09:26) [44]
> 3) Ну и поддержка хотябы 3 видов полей - string,integer
> и float
таких типов в DBF никогда не было.
Были Char (фиксированная строка), Memo (для длинных строк, но огребаешь проблемы), Number (с фиксированной запятой, хранится в сиде строки) и Date (дата в виде строки). А, еще логическое было. Може чего и пропустил, но флоат и интегер там отсутствовали.
Сомневаюсь, что с такой функциональностью ты найдешь компоненты. Это же получится обычная старая добрая СУБД Fox.
← →
Yurisimus (2005-06-02 09:36) [45]Анатолию :
Ладно, скажем так - ftCurrency, но и для него не проставляется кол-во знаков после запятой...
ANB : Ну кто же этого не знает, я просто привел как пример общепонятные и общедоступные типы полей, кто знает - поймет...
Здесь также был рассмотрен компонент halcyon, стоит ли вообще тратить на него время или такой же глюкавый как и TDBF???
← →
Anatoly Podgoretsky © (2005-06-02 09:42) [46]ANB © (02.06.05 09:26) [44]
Тебе не тяжело будет нажать на пробел в колонке Type диалога создания таблицв в Database Desktop?
И нестоит говорить как хранится не представляя сущности.
← →
Anatoly Podgoretsky © (2005-06-02 09:44) [47]Yurisimus (02.06.05 09:36) [45]
FCurrency не поддержан, вместо него есть более мощный тип Number
← →
Yurisimus (2005-06-02 09:50) [48]Анатолий :
Ну ты все никак не уймешься... :) Для ВСЕХ типов в TDBF невозможно проставить кол-во знаков после запятой...
И все же хотелось бы послушать мнения по теме, то есть запись и чтение данных из DBF, а не слушать препирания друг друга... Есть ли компонент осуществляющий такие функции или все же придется все это прописывать вручную??? :)
← →
ANB © (2005-06-02 09:51) [49]
> Anatoly Podgoretsky © (02.06.05 09:42) [46]
- да чаво там представлять то как хранится. Залез нортоном и посмотрел. Строка там лежит. Нагло для всех полей. Числа тоже строками лежат. Прямо так 1234.50
← →
ANB © (2005-06-02 09:54) [50]
> Yurisimus (02.06.05 09:50) [48]
сам писать возмешься ? Дам сырцы по чтению. Запись так себе, но работает без ошибок. Добавление и индексы - делать самому. Создание таблицы - тоже, но это, имхо, не трудно. (Просто грамотно описать заголовок и запихать в файл, структура файла есть) Индексы я сроду не пытался делать - влом было.
← →
Anatoly Podgoretsky © (2005-06-02 10:01) [51]ANB © (02.06.05 09:51) [49]
Модифицированый BCD формат, а даты в System Date Format SDF
← →
Yurisimus (2005-06-02 10:10) [52]ANB :
Да я уже в принципе начал, подрубился через ADO, чтобы была возможность выполнять SQL запросы использовал Query. Да и с типом Float разобрался при создании таблицы, правда для этого сначала сбацал файл MS Excel, а уж потом сохранил его как *.dbf... Дальше проще, просто выполнять SQL запросы и все... привожу пример из проги, хотелось бы проще при использовании TDBF, примерно так:
(прописал функции (GetMyDir и GetMyFile) на разделение пути и файла)
Dbf1.FilePathFull:=GetMyDir(SaveDialog1.FileName);
Dbf1.TableName:=GetMyFile(SaveDialog1.FileName);
Dbf1.FieldDefs.Add("id",ftInteger);
Dbf1.FieldDefs.Add("name",ftString,100);
Dbf1.FieldDefs.Add("price",ftCurrency,(5,2)); //вот это поле и не создается...с ftFloat тоже не работает...
Dbf1.FieldDefs.Add("edizm",ftString);
Dbf1.FieldDefs.Add("srok",ftString,10);
Dbf1.FieldDefs.Add("norma",ftInteger);
Dbf1.FieldDefs.Add("proizvod",ftString,50);
Dbf1.FieldDefs.Add("firma",ftString,50);
Dbf1.CreateTable;
А вот через ADO и Excel:
qrXLTo.Close;
connXLTo.Close;
if dlgSaveXL.Execute then
begin
{Create XLS File}
MyExcel:=CreateOleObject("Excel.Application");
MyExcel.WorkBooks.Add;
MyExcel.WorkBooks[1].WorkSheets[1].Name:="Analiz";
MyExcel.Cells[1,1]:="id";
MyExcel.Cells[1,2]:="name";
MyExcel.Cells[1,3]:="price";
MyExcel.Cells[1,4]:="edizm";
MyExcel.Cells[1,5]:="srok";
MyExcel.Cells[1,6]:="norma";
MyExcel.Cells[1,7]:="proizvod";
MyExcel.Cells[1,8]:="firma";
MyExcel.Cells[2,1]:="0";
MyExcel.Cells[2,2]:="abcd";
MyExcel.Cells[2,3]:=1.23;
MyExcel.Cells[2,4]:="abcd";
MyExcel.Cells[2,5]:="abcd";
MyExcel.Cells[2,6]:="abcd";
MyExcel.Cells[2,7]:="abcd";
MyExcel.Cells[2,8]:="abcd";
ColumnRange:=MyExcel.Workbooks[1].WorkSheets[1].Columns;
ColumnRange.Columns[1].ColumnWidth:=7;
ColumnRange.Columns[2].ColumnWidth:=100;
ColumnRange.Columns[3].ColumnWidth:=10;
ColumnRange.Columns[4].ColumnWidth:=7;
ColumnRange.Columns[5].ColumnWidth:=10;
ColumnRange.Columns[6].ColumnWidth:=7;
ColumnRange.Columns[7].ColumnWidth:=50;
ColumnRange.Columns[8].ColumnWidth:=50;
MyExcel.ActiveWorkbook.SaveAs(dlgSaveXL.FileName+".dbf", 11, false, false, false, false);
MyExcel.ActiveWorkbook.Close(SaveChanges:=True);
try
// Нахожу запущенный экземпляр Excel...
MyExcel:=GetActiveOleObject("Excel.Application");
// Удаляю чтобы не висел в задачах...
MyExcel:=0;
except
end;
Dbf1.FilePathFull:=GetMyDir(dlgSaveXL.FileName);
Dbf1.TableName:=GetMyFile(dlgSaveXL.FileName)+".dbf";
Dbf1.Active:=true;
Dbf1.AddIndex("id_idx","id",[ixPrimary]);
Сами видите что если работать через ADO&Excel то получается много писанины, поентому и хотелось бы компонентик найти чтобы двумя строчками все это забацать...
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
Память: 0.6 MB
Время: 0.043 c