Четене на информация от dbf

Добър ден. Кои са най-добрите инструменти (ADO, персонализирани компоненти и т.н.), които да използвате за четене на информация в списък от всяко dbf поле. Условно тази тема вече беше повдигната, но не намерих окончателния отговор. И все пак, ако все още използвате ADO, тогава кой доставчик да изберете OLE DB или Jet (вторият се препоръчва, но защо?). Благодаря ви предварително.

Освен това бих искал потребителят да не доставя нищо, да не предписва нищо на машината и т.н. Благодаря ти

Само вграденият в програмата двигател няма да изисква нищо да бъде доставено, в други случаи това е въпрос на случайност. Последните версии на ADO не включват JET и самият ADO може да не е инсталиран на компютъра, ако вземем предвид всички операционни системи.

Какво ще кажете за bean тип TDBF? Има ли някакви ограничения за употребата му?

Имам компонент за директен достъп до DBF. Недостатъци: - Написах го сам и дебъгвах само тези части, които наистина бяха необходими - това не е набор от данни, имитация на работа като в DBase III + (FoxPro, Clipper) - Не използвам индекси - леко намалих ограниченията - Memo изяжда само до 65K, игнорира останалото. Плюс това - той винаги чете, в оригинално кодиране (има DOS -> Win транскодираща функция) и понякога по-добре, отколкото чрез драйвера. Мога да го изпратя.

Delfenok (19.05.05 09:15) [3] Точно за това говоря. Относно TDbf - двигателят е нищожен, единственият недостатък е бъгове.

До ANB Ще бъда благодарен [email protected]

До Анатолий Подгорецки: защо бъг?

На Анатолий Подгорецки и бихте ли посъветвали компонент без грешки? По принцип не е нужно да решавам "глобален" проблем. Разтоварване на информация от Dbf в ComboBox и Grid. Този компонент ще се справи ли с това?

С посочената задача, ако dbf е dBase, ще се справи. Проблеми, свързани с работата с индекси,известно увреждане на таблиците на базата данни, по отношение на RecordCount (поне с голям брой записи), липсата на индекс. Тоест можете да го използвате, ако знаете конкретни слабости. Не се опитвайте да използвате за FoxPro, Clipper

Delfenok (19.05.05 09:48) [7] Можете също да използвате dbGrid

На Анатолий Подгорецки

Delfenok (19.05.05 10:12) [10] Повреда при добавяне, таблицата не може да бъде поправена, но все още можете да работите. Във вашия случай това вероятно ще бъде най-доброто решение, пълна независимост, грешки няма да се появят, ако не използвате RecordCount, освен това няма индекси. Всъщност това ще бъде форматът dBase III.

Вече изпратено. Между другото, имам формата на FoxPro.

Т.е. за мен е по-добре да записвам във формат dBase III? Можете ли да кажете нещо за TDbf dBase Access v.6.20?

Защо не използвате halcyon?

Защо всички се страхуват толкова от BDE? За толкова много версии вече, вероятно, всички проблеми са извадени. Инсталацията също е доста проста: regsvr32 BdeInst.dll. И в Delphi, BDE-компонентите са заточени за него от самото начало и също са отстранени грешки от дълго време.

Delfenok (19.05.05 10:51) [13] По-добър dBase IV

Той по същество само импортира от базата данни, самата работа с базите данни не е необходима.

До ANB: Много ви благодаря!

Към Юрий-7: Можете ли да посочите предимствата му пред аналозите?

Към Анатолий Подгорецки: в компонента TDBF няма филтър, тогава, за да направя някакъв избор, трябва да прегледам всички записи, след което RecordCount, както разбирам, ще трябва да използвам.

> няма филтър в компонента TDBF, тогава, за да има някакъв избор > do- по дяволите, и аз го нямам. И да прегледам всички записи - не кошер, да затегна индекс.

Всички предимства иНе мога да ви кажа, защото работих с него само веднъж, но това е пълноценен компонент, който осигурява директен достъп до dBase файлове, поддръжка на индекси и филтър.

Аз самият работя чрез BDE, това ми подхожда, но Halcyon е по-добре да използвате, ако не планирате да инсталирате BDE на машината.

Спрете и започнете отначало, с тълкуването на това "да прочетете информацията в списъка от всяко dbf поле" и други важни точки. В противен случай това се случва в началото, след това изведнъж изскачат филтри и накрая ще се появят DbGrid, сортиране и процеси.

> - малък скромен въпрос, който идва към набора от данни, > ако в полето DBF датата е празна (интервали) ?Според моя нула и идва. Проверката на TField.IsNull ще запази.

Mini Tz в студиото :-)

Има две dbf таблици, които съдържат референтна информация, от която потребителят ще се нуждае в бъдеще. Предвижда се да се поставят Comboboxes във формуляра, в който тази информация ще бъде качена, но въпросът е (това е по отношение на филтрите), че гласовете са свързани помежду си - веднага щом се избере запис в първото поле, само част от информацията от dbf се появява автоматично във второто поле, тоест типът се филтрира. След тези действия потребителят ще попълни в информацията, от която се нуждае, използвайки някаква нишка във формата, в която отново ще има кутия, препращаща към друга dbf таблица. Цялото нещо - пълнена информация - ще бъде показано в мрежата, но все още не е запазено никъде! След всички тези проблеми, потребителят трябва да генерира текстов файл с определена структура, който ще съдържа цялата информация, показана в момента в мрежата. И това е всичко. Няма записване в dbf и т.н. Уф :-) Надявам се поне нещо да е ясно от моята глупава история.

Имах задача да чета отчети от DBF. Опитах ADO, 1- бавно, 2- за VFoxPro файлове трябвашеотделно актуализирайте DLL за ODBC. Намерих компонента TVKDBFNTX на Torri. Чете vlet (не се опитвах да пиша). Намерих един малък недостатък, но работи като часовник. Милион записа се четат за 5-7 секунди, доколкото си спомням

До alex_*** : Какво не е наред? подходящ за моята задача? и TDbf dBase Access v.6.20, всяка версия, кой е пробвал темата?

TDBf файлове VFoxPro не чете според мен

> Delfenok (05/19/05 12:39 pm) [24]- куп основни детайли, набор от данни ще бъде тук и индекси. Всичко щеше да стане от само себе си. Какъв друг формат можете да изберете?

Да, опитайте - вземете DBF от FoxPro с празни дати, свържете се чрез ADO и погледнете . Да, и нямаше понятие за нула нито във fox, нито в клипера.

До Анатолий Подгорецки: поискахте мини TK, но го изпратихте, но резултатът. Твоят отговор.

> Да, опитайте - вземете DBF от FoxPro с празни дати, свържете се чрез ADO и погледнете . И нямаше концепция за null нито във fox, нито в clipper и какво, какво не съществуваше? те запазват датата в низа и празна дата = празен низ. тогава зависи от двигателите кой интерпретира Jet (сдвоен с BDE), например, той преобразува това състояние в нула, дори заявките с WHERE DAT IS NULL работят правилно. се очаква дата.

faux driver flaw (IMHO), изглежда не го поправят нарочно, имат много (с индекси, създаване например). и в самата среда на Fox всичко е наред.

Delfenok (19.05.05 15:12) [36] Нищо, неясно е написано. Получихте съвет.

> и най-вероятно сте работили чрез VFP драйвера, който от > празен низ 0 "прави", след което вече е преминал като дата > защото дата и очакване-точно. Свързах се чрез ADO и използвах VFP драйвера. Нямаше начин да се използва BDE, тъй като тогава никой нямаше да може да го разгърне. Въпреки че през ADO стана още по-зле, беше по-лесно да напиша инсталатор :))) И във формата, която имам, работеше само Empty(Fld).

> те запазват датата в реда и празна дата = празен ред- добре, да, получавам редове директно от dbf. Между другото, просто читателят не е толкова труден за писане. За DBF + MEMO написах 3 дни в спокойно състояние, добре, индексите все още могат да бъдат отрязани за 1-6 дни. Друго е по-лошо - индексите могат да бъдат в различни формати.

Попаднах на следния бъг в компонента TDBF - не мога да създам поле от типа Float, няма Precision и Size и ако се пише без тях, тогава се създава твърде голям брой от 18 размера и след запетая 9 цифри, ужас. И трябва да използвам само float(5,2) за цената. Кои са нормалните компоненти за работа с *.dbf-kami. Следните функции са от особен интерес: 1) Създаване на таблица 2) Създаване на индексен файл 3) Е, поддръжка за поне 3 типа полета - низ, цяло число и плаваща единица Ако някой знае такъв компонент, моля да ми каже, иначе е скучна работа да предписвате всичко това със собствените си химикалки.

Yurisimus (06/02/05 09:04) [41] Кой използва Float за пари :-) Сигурно не се харесвате много. Float в xBase се използва за много големи (над 18/20 знака) или малки числа. TDbf сам по себе си е компонент с много грешки, използването му е оправдано само за прости вградени системи.

Един от сериозните проблеми е повредата на таблицата, нарушаването на структурата на базата данни.

> 3) Е, поддръжка на поне 3 вида полета - низ, цяло число > и floatтакива типове никога не са съществували в DBF. Имаше Char (фиксиран низ), Memo (за дълги низове, но срещате проблеми), Number (с фиксиранзапетая, съхранена като страна на низ) и Дата (дата като низ). О, също беше логично. Може би съм пропуснал нещо, но float и integer липсваха. Съмнявам се, че ще намерите компоненти с такава функционалност. Ще се окаже обичайната добра стара СУБД на Fox.

Анатолий: Добре, да кажем - ftCurrency, но и за него не е зададен броят на десетичните знаци.

АНБ: Е, който не знае това, просто дадох за пример общоприетите и публични видове полета, който знае, ще разбере.

Компонентът halcyon също беше разгледан тук, независимо дали си струва да отделите време за него или е също толкова бъгав като TDBF.

Yurisimus (06/02/05 09:36) [45] Fcurrency не се поддържа, вместо това има по-мощен тип число

Анатолий: Е, все още не можеш да се успокоиш. :) За ВСИЧКИ типове в TDBF е невъзможно да се зададе брой знаци след десетичната запетая.

И все пак бих искал да чуя мнения по темата, тоест писане и четене на данни от DBF, а не да си слушаме пререкания. Има ли компонент, който изпълнява такива функции, или все пак трябва да предписвате всичко това ръчно. :)

> Yurisimus (06/02/05 09:50) [48]можеш ли да пишеш сам? Ще дам сурово четене. Записът е така, но работи без грешки. Добавяне и индекси - да направи най-много. Създаване на таблица - също, но това, IMHO, не е трудно. (Просто опишете правилно заглавката и я пъхнете във файла, файловата структура е там) Никога не съм опитвал да правя индекси - беше счупен.

ANB : Да, вече започнах по принцип, работих през ADO, за да мога да изпълнявам SQL заявки с помощта на Query. Да, и разбрах типа Float при създаването на таблицата, въпреки че за това първо sbatsat файла на 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("име",ftString,100); Dbf1.FieldDefs.Add("цена",ftВалута,(5,2)); //това поле не е създадено. не работи и с ftFloat. Dbf1.FieldDefs.Add("edizm",ftString); Dbf1.FieldDefs.Add("srok",ftString,10); Dbf1.FieldDefs.Add("norma",ftInteger); Dbf1.FieldDefs.Add("производство",ftString,50); Dbf1.FieldDefs.Add("firma",ftString,50); Dbf1.CreateTable;

Но чрез ADO и Excel:

qrXLTo.Close; connXLTo.Close; ако dlgSaveXL.Execute тогава започнете MyExcel:=CreateOleObject("Excel.Application"); MyExcel.WorkBooks.Add; MyExcel.WorkBooks[1].WorkSheets[1].Name:="Analyz"; MyExcel.Cells[1,1]:="id"; MyExcel.Cells[1,2]:="име"; MyExcel.Cells[1,3]:="цена"; MyExcel.Cells[1,4]:="edizm"; MyExcel.Cells[1,5]:="srok"; MyExcel.Cells[1,6]:="norma"; MyExcel.Cells[1,7]:="производство"; 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].ColumnW > ColumnRange.Columns[2].ColumnW > ColumnRange.Columns[3].ColumnW > ColumnRange.Columns[4].ColumnW > ColumnRange.Columns[5].ColumnW > ColumnRange.Columns[6].ColumnW > ColumnRange.Columns[7].ColumnW > ColumnRange.Columns[8].ColumnW >MyExcel.ActiveWorkbook.SaveAs(dlgSaveXL.FileName+".dbf", 11, false, false, false, false); MyExcel.ActiveWorkbook.Close(SaveChanges:=True);

опитайте // Намерете работещ екземпляр на Excel. MyExcel:=GetActiveOleObject("Excel.Application"); // Изтривам го, за да не виси в задачите. MyExcel:=0; с изключение на край;

Dbf1.FilePathFull:=GetMyDir(dlgSaveXL.FileName); Dbf1.TableName:=GetMyFile(dlgSaveXL.FileName)+".dbf"; Dbf1.Active:=true; Dbf1.AddIndex("id_idx","id",[ixPrimary]);

Можете сами да видите, че ако работите през ADO&Excel, получавате много драскане, поради което бих искал да намеря компонент, който да покрие всичко това с два реда.