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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2009, 21:19   #1
AXEnic
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию помогите с БД Access

Сложилась такая ситуация: у меня имеется форма, на которой размещено множество едитов. После ввода данных (и кое-каких операций) нужно чтобы содержимое этих едитов сохранилось в БД Access. А после, при открытии этой формы, нужно загрузить в эти едиты значения из БД (в таком же порядке в котором они были первоначально).
Буду благодарен любой помощи!
AXEnic вне форума Ответить с цитированием
Старый 14.04.2009, 22:42   #2
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

В onActive твоей формы пропиши примерно так:
Edit1.Text:=AdoQuery1.Fieldbyname(' PoleForEdit1').asString;
и в таком духе до последнего едита.
Или второй вариант создаешь специальное поле, например PoleForEdits
и заносишь туда данные.
AdoQuery1.Insert;
AdoQuery1.fieldByName('PoleForEdits ').AsString:=Edit1.Text;
AdoQuery1.Post;
и так по порядку до Editn, а потом в цикле считываешь с самого первого поля до последнего и присваиваешь едитам.
AdoQuery1.First;
Edit1.text:=AdoQuery1.fieldbyName(' PoleForEdits').Asstring;
AdoQuery1.Next;
Это конечно если этих едитов не так много самый простой вариант...
Третий вариант если едитов очень много то в цикле перечислить по названию компонента начиная с Edit + 1 до Edit +n...
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 14.04.2009, 23:23   #3
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Проверил третий вариант, получился примерно такой код:
Код:
{сохранение едитов в базу}
procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
  Comp: TComponent;
begin
  for I := 1 to 3 do    // Iterate
  begin
    Comp:=FindComponent('Edit'+inttostr(i));
    AdoQuery1.Insert;
    AdoQuery1.FieldByName('caption').AsString:=(Comp as TEdit).Text;
    AdoQuery1.Post;
  end;    // for
end;
а потом для загрузки из базы

Код:
procedure TForm1.FormActivate(Sender: TObject);
var
  I: Integer;
  Comp: TComponent;
begin
  {загрузка едитов из базы}
for I := 1 to 3 do    // Iterate
begin
  Comp:=FindComponent('Edit'+inttostr(i));
  AdoQuery1.RecNo:=i;
  (Comp as TEdit).Text:=AdoQuery1.fieldbyname('caption').AsString;
end;

end;
Все должно работать, проверял...
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 15.04.2009, 12:44   #4
AXEnic
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от ArtInt Посмотреть сообщение
Все должно работать, проверял...
Благодарю! Как раз то, что нужно!
И ещё хотел спросить:
как создать эту таблицу куда эти данные пойдут (создать не через Access конечно) ?
AXEnic вне форума Ответить с цитированием
Старый 15.04.2009, 14:08   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Почему не через Access?
Может имелось в виду подсоединить базу данных Access в Дельфи?
Легче создать файл *.mdb (Access) и сделать там таблицы, а уже потом разместив компоненты в дельфи подсоединить данную таблицу через AdoConnection, например, в Adoquery прописать запрос, который учитывает данную таблицу...
Или здесь какая то специфичная задача, которая требует физического создания таблицы прямо из дельфи?
Уточните немного конкретнее...
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 15.04.2009, 14:31   #6
AXEnic
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию

Я наверно неправильно выразился... Файл БД Access (*.mdb) есть. Но там, к примеру, всего одна таблица. После, содержимое едитов сохраняется в ней. А при следующем открытии этой формы можно было вводить новые данные, которые уже сохранялись бы в новой таблице..
AXEnic вне форума Ответить с цитированием
Старый 15.04.2009, 14:48   #7
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Так вот в чем дело. Поначалу мне показалось, что содержимое едитов это какие то настройки для программы, которые являются уникальными. Оказывается это список вносимых данных. Тогда вариант первый:
создается в аксесс таблица, а в ней поля начиная с Edit1 до Editn и заносишь данные каждый раз внося новые данные в каждое поле.
А вот насчет создания новой таблицы каждый раз, мне кажется база данных разрастется немеренно, да и не совсем правильно по логике, хотя если ты чуть чуть поподробнее напишешь для чего тебе столько едитов, и в чем суть программы, может удастся упростить логику построения программы.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 15.04.2009, 15:22   #8
AXEnic
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию

Может для кого-то эта программа и окажется проста... но я еще плохо разбираюсь в Delphi.
Суть программы заключается вот в чем: имеется форма, с несколькими вкладками. В каждой вкладке свой набор едитов (хотя думаю лучше будет использовать не вкладки, а отдельные формы).
В общем, содержимое едитов будет распечатано на бланках (для каждой вкладке имеется свой бланк). Бланки здесь это определенные листки фирмы. Они заполняли их в ручную, поэтому эта программа должна помочь в заполнении. Поэтому каждый едит имеет свою координату чтоб в точности заполнить бланк.
Для распечатки я едиты настроил - бланки нормально заполняются.
Вот после заполнения этих едитов нужно сохранить как-нибудь, чтоб потом можно было востановить данные (например, чтоб можно было просмотреть эти данные через несколько дней, указав дату заполнения)...
AXEnic вне форума Ответить с цитированием
Старый 15.04.2009, 15:48   #9
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Тогда можно создать две таблицы 1. Дата добавления(поля Код, Дата) 2. Список едитов (Kod,IdDate, Edit1,...Editn).
Связать эти таблицы отношением один ко многим Дата добавления.Kod к Список едитов.IdDate
После добавлять данные. Это в том случае, если в один день может быть заполнено несколько таких форм.
Если дата уникальная каждый раз, то наверное создавать лишнию таблицу не надо просто сделать поле в Списке едитов и потом в запросе
отфильтровать.
Сохранять наверное лучше так
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
  Comp: TComponent;
begin
  for I := 1 to 3 do    // Iterate
  begin
    Comp:=FindComponent('Edit'+inttostr(i));
    AdoQuery1.Insert;
    AdoQuery1.FieldByName('Edit'+inttostr(i)).AsString:=(Comp as TEdit).Text;
    AdoQuery1.Post;
  end;    // for
end;
Загрузка из базы
Код:
procedure TForm1.FormActivate(Sender: TObject);
var
  I: Integer;
  Comp: TComponent;
begin
  {загрузка едитов из базы}
for I := 1 to 3 do    // Iterate
begin
  Comp:=FindComponent('Edit'+inttostr(i));
  AdoQuery1.RecNo:=i;
  (Comp as TEdit).Text:=AdoQuery1.fieldbyname('Edit'+inttostr(i)).AsString;
end;

end;
Обрати внимание на изменение в коде 'Edit'+inttostr(i). То есть сохраняем новый едит в новое поле и загружаем также.
По моемому по такому принципу можно построить программу. Если, конечно нет каких еще дополнительных условий.
На первый взгляд находится такое решение задачи.
Напиши про успехи или про непонятные моменты...
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 15.04.2009, 16:12   #10
AXEnic
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию

я, если честно, не понял как сделать.. таблицы access совсем непонятны
ты не мог бы выложить пример из 5 едитов?
буду очень признателен!
AXEnic вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите в изучении БД Access -HunteR- БД в Delphi 25 07.04.2009 02:03
Помогите с Access !!! Drummer_SV Помощь студентам 0 03.06.2008 23:27
Помогите с Access! Adm Microsoft Office Access 2 08.02.2008 08:38
Delphy и Access.вводя инфу во вторичный файл Access, она отражалась в первом ADOTable Lev БД в Delphi 0 11.11.2007 12:14