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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2009, 14:54   #1
UniDreamling
Новичок
Джуниор
 
Регистрация: 19.05.2009
Сообщений: 2
По умолчанию Соединение Delphi и БД Access

Добрый день.
Уважаемые форумчане, я понимаю, что вопрос для многих покажется нелепым, но тем не менее.
У меня есть опыт программирования, на PHP например с нуля написана небольшая CMS, и там соединение с БД производилось предельно просто - одна функция подключения к серверу БД, в которой передаются требуемые аттрибуты, и всё, можем выполнять запросы и всё, что требуется.
Я уже второй день пытаюсь понять, как мне подключится к БД Access, используя дельфи. Всё, что мне нужно - это возможность добавлять и изменять строки в табличке, причем чтобы это выполнялось на программном уровне, то есть пользователь ввел данные в 2 текстовых поля, нажал кнопку и пошел инсерт в БД. Мне же всюду - во всех книгах и в интернете - предлагают вывести данные из таблицы через DBGrid, описывают работу кучи каких-то компонентов, которые тоже замечательно выводят данные, но мне это всё не нужно.
Подскажите пожалуйста, есть ли простой способ установить связь с табличкой из БД Access и получить возможность вносить в неё данные (Неважно, с использованием SQL или как-то по-другому) и вытаскивать данные, но не для отображения, а в переменные.
Большое спасибо
UniDreamling вне форума Ответить с цитированием
Старый 19.05.2009, 15:30   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Все равно придется скидывать на форму(или DataModule) компоненты, ADOConnection, ADOTable и DataSource, по их настройке полно инфы и в учебниках.
Добавление записей из двух Edit'ов в таблицу:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOTable1.Insert;
 ADOTable1.Edit;
 ADOTable1.FieldByName('Поле1').Value := Edit1.Text;
 ADOTable1.FieldByName('Поле2').Value := Edit2.Text;
end;
Насчет редактирования, надо скинуть на форму с закладки Data Controls столько, сколько нужно TDBEdit'ов(вроде два) и в DataSource выставить DataSource1; еще нужно скинуть TDBNavigator и тоже изменить свойство DataSource.
Можете у навигатора изменить свойство VisibleButtons на те кнопки, какие вам нужны, в вашем случае это только First, Priror, Next, Last

Насчет вытаскивания, каким переменным вам нужно присваивать значения из таблицы? Или вы знаете индекс нужной строки? или надо в массив значений?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 19.05.2009, 15:33   #3
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

Прикрепил...
Вложения
Тип файла: rar Delphi_access.rar (346.2 Кб, 116 просмотров)
Noor вне форума Ответить с цитированием
Старый 25.05.2009, 16:42   #4
UniDreamling
Новичок
Джуниор
 
Регистрация: 19.05.2009
Сообщений: 2
По умолчанию

Спасибо огромное
В массив значений было бы идеальным вариантом.

Последний раз редактировалось UniDreamling; 25.05.2009 в 16:45.
UniDreamling вне форума Ответить с цитированием
Старый 25.05.2009, 18:44   #5
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Создаете массив типа запись:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
   //В нее надо занести все поля с типами как в базе данных
  TData = record
   pole1: string;
   pole2: string;
   pole3: integer;
  end;
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Data: array of TData;
...
И вот код при нажатии на кнопку:
Код:
procedure TForm1.bt_InArrayClick(Sender: TObject);
var
 i: integer;  
begin
 //Если таблица активна и в ней присутствуют записи
 if (ADOTable1.Active = true) and (ADOTable1.RecordCount <> 0) then
 begin
  //Если строк много, можно использовать ProgressBar
  ProgressBar1.Max := ADOTable1.RecordCount;   //Максимальное значение ProgressBar'а
  ProgressBar1.Step := 1;  
  SetLength(Data, ADOTable1.RecordCount);  //Устанавливаем длину массива
  //Заполняем его
  for i := 0 to ADOTable1.RecordCount - 1 do
  begin
   Data[i].pole1 := ADOTable1.FieldByName('Field1').AsString;
   Data[i].pole2 := ADOTable1.FieldByName('Field2').AsString;
   Data[i].pole3 := ADOTable1.FieldByName('Field3').AsInteger;
   ProgressBar1.Position := ProgressBar1.Position + 1;  //Увеличиваем позицию
   Application.ProcessMessages;  //Выполняем все накопившиеся события для формы, чтобы не зависало при большом кол-ве записей
  end;
  ProgressBar1.Position := 0;
 end;
end;
FieldByName - находит поле по его имени, которое в таблице. Будьте внимательны и присваивайте поля с одинаковыми типами что и в массиве.
Потом можно будет из этого массива вытаскивать значения:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
 if Data <> nil then
 begin
  Edit1.Text := Data[3].pole1;
  Edit2.Text := Data[3].pole2;
  Edit3.Text := IntToStr(Data[3].pole3);
 end;
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 7. Помещение рисунков(как отд. объектов) на Panel и соединение их. AlexandЯ Помощь студентам 2 22.04.2009 16:04
Соединение с мускулом из Delphi через объект TMySqlClient CyberJohn БД в Delphi 0 05.04.2009 22:18
Соединение и работа с удалённой БД MS SQL на Delphi ViTYAi БД в Delphi 47 04.09.2007 09:30
Соединение с БД Access (ADOConnection) Washington БД в Delphi 5 12.03.2007 17:14