Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2009, 01:44   #1
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию Редактирование полей БД из формы хранящейся в ДЛЛ ?

Всем привет. БД - Access. Доступ к БД - ADO. Вот возникла такая трабла:
Есть форма для редактирования данных из БД. Эта форма хранится в ДЛЛ. Все бы нече.......но, на форме имеются компоненты TDBEdit , которым необходимо заполнить свойства DataSourse и DataField, что бы можно было редактировать БД. Но мой компонент TDataSourse находится в самом проекте программы и следовательно я не могу заполнить те свойства и поэтому не смогу редактировать БД.
Вопрос: как мене из формы(Диалоговая) которая хранится в ДЛЛ, можно редактировать поля БД ?
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 14.11.2009 в 01:59.
spamer вне форума Ответить с цитированием
Старый 14.11.2009, 05:59   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Ну так ведь указатель-то на TDataSourse можно передать в библиотеку. Т.е. DLLDataSource := MainDataSource (Утрирую. Понятно, что делаем через импортированную ф-ию). Точно так же передается DataSource и ADOConnection. В длл даже компонентов в принципе можно не кидать, а просто объявить необходимые переменные, а затем все динамически связать.

Последний раз редактировалось Баламут; 14.11.2009 в 10:44.
Баламут вне форума Ответить с цитированием
Старый 14.11.2009, 16:23   #3
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вот начал пробовать как Вы сказали, Баламут. Но чето не удачно у меня вышло это все.
Вобщем вот моя длл :
Код:
procedure ShowAddForm(var AC : TADOConnection; var AT : TADOTable; var DS : TDataSource);
var
  FAddRecord: TFAddRecord;
  fAC : TADOConnection;
  fAT : TADOTable;
  fDS : TDataSource;
begin
FAddRecord := TFAddRecord.Create(nil);
  try
    FAddRecord.ShowModal;

    fAC := TADOConnection.Create(nil);
    fAT := TADOTable.Create(nil);
    fDS := TDataSource.Create(nil);

    fAC := AC;
    fAT := AT;
    fDS := DS;

    FAddRecord.DBEdit1.DataSource := fDS;
    FAddRecord.DBEdit1.FieldAddress('Фамилия');   //Полей многовато, поэтому реализовал только для одного
    if FAddRecord.ModalResult = mrOK then
     if fAT.Modified then
          fAT.Post;
  finally
    FreeAndNil(FAddRecord);
    fAC.Free;
    fDS.Free;
    fAT.Free;
  end;

end;
Вот так вызываю в проекте процедуру :
Код:
 DataModule1.BookTable.Insert;
  ShowAddForm(DataModule1.ADOConnection1, DataModule1.BookTable, DataModule1.DataSource1);
Но оно не работает. В DBEdit1 ничего нельзя ввести. По закрытию окна пропадают все прежние поля, что были в БД. Потом если заново открыть окно, и нажать кнопку применить, то вылазит access violation.

Как мене вот то что выше, довести до рабочего состояния?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 14.11.2009, 17:29   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

ну как минимум это FAddRecord.ShowModal; нужно писать после создания вспомогательных компонентов

хз что вы там хотите, но кактотаг оно должно перестать ругаться
Код:
procedure ShowAddForm(var AC : TADOConnection; var AT : TADOTable; var DS : TDataSource);
var
  FAddRecord: TFAddRecord;
  fAC : TADOConnection;
  fAT : TADOTable;
  fDS : TDataSource;
begin
FAddRecord := TFAddRecord.Create(nil);
  try
    fAC := TADOConnection.Create(nil);
    fAT := TADOTable.Create(nil);
    fDS := TDataSource.Create(nil);
    try
      fAC := AC;
      fAT := AT;
      fDS := DS;
      FAddRecord.DBEdit1.DataSource := fDS;
      FAddRecord.DBEdit1.FieldAddress('Фамилия');   //Полей многовато, поэтому реализовал только для одного

      if FAddRecord.ShowModal = mrOK then
         if fAT.Modified then
            fAT.Post;
    finally
      fAC.Free;
      fDS.Free;
      fAT.Free;
    end;
  finally
    FreeAndNil(FAddRecord);    
  end;
end;
единственное что непонятно так это - почему параметры в процедуре объявлены как вЫходные?
soleil@mmc вне форума Ответить с цитированием
Старый 15.11.2009, 10:57   #5
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

В общем в результате длительной борьбы с собственной ленью и алкоголизмом я все-таки набросал примерчик. Увы, БД в архив класть не стал. Но думаю и без того все понятно будет.
Вложения
Тип файла: rar Forum.rar (12.5 Кб, 10 просмотров)
Баламут вне форума Ответить с цитированием
Старый 15.11.2009, 22:40   #6
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Баламут, спасибо. Смысл ясен.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При удалении записей значения полей с type:=Autoincrement (т.е+) в оставшихся полей не изменяются kenta БД в Delphi 2 29.10.2009 08:28
Объеденение полей запроса в для отображения нескольких полей в одном списке mrCreator Microsoft Office Access 3 08.08.2009 00:53
проверка полей формы AIst PHP 3 10.09.2008 02:59
Про формы в длл Altera Общие вопросы Delphi 2 24.06.2008 22:19
редактирование формы РИЯ Помощь студентам 4 31.10.2007 10:53