WEB форумы на jedi
[Форум] [Помощь] [Поиск] [Выйти]
Добро пожаловать, [info]User

WEB форумы на jedi [ПОИСК] [Архив до 03.2006]

Тема Помогите!!! Работать с dbf из консоли К предыдущему сообщению На следующее сообщение Программирование

Отправил SlavA_ в 22:44 15.01.2003[Ответить]
Помогите пожалуйста!!!
Суть проблемы в следующем: мне необходимо работать с dbf файлами не используя визуальные компоненты, что я делаю для проверки работоспособности: я регистрирую базу данных в SQL Explorer, создаю кансольное приложение, создаю Data Module, подключаю к нему соотв базу данных с помощью TTable и Data Source, модуль, в котором прописан и объявлен Data Module подключаю к основному модулю (для консоли - это файл проекта) и пытаюсь получить для соответствующей таблицы хотябы число полей в наборе данных(FieldCount) и вывести это на консоль. При выполнении программы нет ни каких ошибок (во всяком случае среда ничего не сообщает) но консоль быстро пропадает и программа завершается (затормозить не удаётся), короче: с консолью ничего не получается...
Но когда я пробую то же самое сделать, создавая вместо консоли форму и выводя результат в Edit, то всё получается...
Что делать? Помогите!!!


Отправил SlavA_ в 22:53 15.01.2003[Ответить]
Да! По специфике задачи визуальные компоненты использовать нельзя...


Отправил Rupert в 10:23 16.01.2003[Ответить]
В смысле просто выпечатать? А реадлн в конце есть? может вывод все же имеет место быть, только вы не успеваете его засечь? А потрассивровать? Или религия не позволяет?


Отправил SlavA_ в 10:54 16.01.2003[Ответить]
Дело в том, что реадлн в конце не помогает, а при трассировке, опять же, просто всё проскакивает. Вот она программка:

program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1 in 'Unit1.pas' {DataModule1: TDataModule};
var str:integer;
begin
DataModule1.block.Active:=true;
DataModule1.block.Open;
writeln(DataModule1.block.FieldCount);
readln(str);
DataModule1.block.Close;
end.

Как видите, ничего сложного или феноменального нет, однако не работает. При чём, если пробую запускать откомпилированный файл, то в вин2000 получаю ошибку:Инструкция по адресу 0х0046в8аи обратилась к памяти по адресу 0х00000054. Память не может быть read.
Делфи ошибок не выдаёт....


Отправил Rupert в 11:23 16.01.2003[Ответить]
Э, брат, все дело в волшебных пузырьках. Подключил модуль и доволен. А СОЗДАВАТЬ ЕГО Пушкин БУДЕТ !!!! уЧИ МАТЧАСТЬ!

По теме - с работы я тебе конечно не посоветую что делать конкретно, ибо не задавался подобными вопросами. Давненько ДБ компоненты не юзал. Но во первых, нафига тебе вообще еще один модуль? Неужели нельзя было просто прописать нужные юзы описать переменные для работы с бд а потом их создать?
но даже если так, то перед опен ты должен был создать переменную типа Тдата модуле, и создать ее, что то вроде
ДатаМодуль =ТДатаомодуле.Креате.


Отправил Rupert в 11:26 16.01.2003[Ответить]
кстати, чтобы проще и понятней. Найди справочник кулиба.цшм. Это бибилия начинающего и не очень дельфийца. Смотреть там по адресу создание компонент рунтайм.


Отправил SlavA_ в 12:16 16.01.2003[Ответить]
Отлично!!!
Берём два модуля и лёгким движением руки получаем:

program Project2;
{$APPTYPE CONSOLE}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables;
// Unit1 in 'Unit1.pas' {DataModule1: TDataModule};

type
TDataModule1 = class(TDataModule)
block: TTable;
blockENTITY: TStringField;
blockLAYER: TStringField;
blockELEVATION: TBCDField;
blockTHICKNESS: TBCDField;
blockCOLOR: TBCDField;
DSblock: TDataSource;
end;

var
DataModule1: TDataModule1;
str:integer;


begin

DataModule1.Create(nil);
//DataModule1.visible:=false;


DataModule1.block.Active:=true;
DataModule1.block.Open;
writeln(DataModule1.block.FieldCount);
readln(str);
DataModule1.block.Close;
end.

И ни чего не работает!!!


Отправил SlavA_ в 12:18 16.01.2003[Ответить]
А справочника у меня нету :((
И взять не откуда (бедный студент)...


Отправил CAHbKA в 12:30 16.01.2003[Ответить]
тут еще не видно где указан сам файл.dbf


Отправил Rupert в 12:59 16.01.2003[Ответить]
тю, нету...
уа.ру Кулиба, и по первой ссылке. Он небольшой, метра 2


Отправил Rupert в 13:00 16.01.2003[Ответить]
Согласен. Если уш вы все прописали в один модуль так и поля ручками теперь заполнить надо. Все что мышкой раньше делали


Отправил Belekhov в 11:43 03.03.2003[Ответить]
Я сталкивался с проблемой dbf правда не в таком контексте,
но пришлось писать собственную обработку dbf , что и тебе советую,
Это не сложно и быстро дня за три можно сделать , мог бы выслать но эту гадость я писал на C++