Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание БД MS Access, Есть форма с Editami нужно сделать БД 
:(
    Опции темы
Rodman
Дата 24.9.2006, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Fighter, понимаешь с MySQL получится и создать базу и таблицы в ней... а вот с Access не в какую не проходят эти запросы... я так думаю что там структура какая-то не как везде...

Вот просто и хочу увидеть пример на Delphi который сделал бы это...

Если у кого-то получалось подобное, то выложи (но только если сам пробовал, а не в инете видел)...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Сарт
Дата 24.9.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Как я понял, тема животрепещуща=)
Могу дать подсказку..что умные люди посоветовали....Мне правда не помогает=)
Итак, совет:
Совсем ",tp доп.требований к установленным программам" - естественно никак. 
Cамый простой вариант - БД MS Access (сама СУБД не нужна) и интерфейс к ней ну пусть на той же Delphi. Доступ через ADO. ну если совсем АПИ, то через ODBC.
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Savek
Дата 25.9.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Вот процедура создает базу Аксес
Код

procedure CreateMSAccessDB(filename : String);
var
  DBEngine, Workspace: Variant;
const
  {Important to use the following constant as is}
  dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0';
  dbVersion30 = 64;
begin
if not FileExists(FileName+'.mdb') then begin
  //DBEngine := CreateOleObject('DAO.DBEngine');
  DBEngine := CreateOleObject('DAO.DBEngine.36'); //For DAO 3.5
  Workspace := DBEngine.Workspaces[0];
  try
    Workspace.CreateDatabase(filename, dbLangGeneral, dbVersion30);
  except on EOleException do
    ShowMessage('Невозможно создать!');
  end;
  end;
end;


PM MAIL   Вверх
SergeBS
Дата 25.9.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Сарт
Цитата

Могу дать подсказку..что умные люди посоветовали....Мне правда не помогает=)

Гони этих "умных" в шею.
Если это учебная задача, то лепи DBF-ки - потянет, а если нет, то подумай: что с тобой сделают, когда в результате, например, нажатия на Reset, скачка в розетке или особо "продвинутого" юзера у тебя вся база Access грохнется.  Особенно если через 3-4 месяца после начала эксплуатации. Сервера ставят не от жира, а чтобы данные не терялись. Поскольку дешевле будет один комп запереть в кладовке, чтобы никто не мог подойти, подоткнуть к нему стриммер, навесить SQL сервер и спать спокойно.  
Цитата

интерфейс к ней ну пусть на той же Delphi. Доступ через ADO.

Через ADO я тебе к любому серваку достучусь. А если в укромном уголке "вдруг" MS SQL заведется, то доп. требование: MDAC 2.8 + DCOM98 для Win95/98 (или IE >=5.5, который его молча впихнет).
Цитата

ну если совсем АПИ, то через ODBC

Пальцы об клаву до костей сотрешь smile. Пиши тогда сразу на VC++.

PM MAIL   Вверх
Сарт
Дата 25.9.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Задача НЕ учебная.. производственная=) Попросил директор настойчиво=) Была бы возможность с SQL я бы особо и не парился=)
А как насчет записи??Подскажи плиз, вельми дзенкуе скажу пану
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
SergeBS
Дата 26.9.2006, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Сарт,
 
Цитата

Задача НЕ учебная.. производственная=) Попросил директор настойчиво=) Была бы возможность с SQL я бы особо и не парился=)

Ну так и объясни директору, что либо в кладовке/подсобке/... (короче под замком, а ключ только у него и у тебя) сервер будет стоять, либо он через 4-5 месяцев от инфаркта помрет, когда все данные о кредитах грохнутся без возможности восстановления. И нефиг тут париться. Из говна пуля только говенная выйдет.
Насчет SQL: в комплекте Офиса есть MSDE - MS SQL server Developer Edition. Т.е. есть лицензия на Офис - можешь его поставить. Папка с инсталляшкой так и зовется - MSDE. От настоящего сервака отличается тем, что:
1. Одновременно - не более 5 транзакций, остальные - в очередь. Но все равно шустрее, умнее и надежнее, чем Access. 
2. Док в комплекте - никаких. И тулз тоже. Однако берем дистрибутив нормального сервера, при установке на не-серверную ОС (если не мухлевать smile ) встанет именно MSDE со всем комплектом док и инструментов. Серьезным дядям показываем лицензию на Офис - имеем право юзать сервер, а доки и инструменты предметом лицензирования не являются smile. Да и нужны они в основном на машине разработчика.
PM MAIL   Вверх
Сарт
Дата 26.9.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Я работаю тока 2 недели=) Так что вряд ли твой вариант мной осуществим=). Так что план пока--сделать БД на 1 компе, резервно вручную его втихомолку копировать, потом, когда накроется---достать из рукава=).Ну получить премию, а заодно и объяснить чем сервер хорош=)

В общем, базу , похоже, мне создатьь помогли... помогите плиз реализовать по ней еще и поиск=) 
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
SergeBS
Дата 27.9.2006, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Сарт
Цитата

Я работаю тока 2 недели=) Так что вряд ли твой вариант мной осуществим=). 

Мог бы еще добавить, что это первая работа, по образованию - не программист и т.п... Для полноты картины. Что, впрочем, ясно. И сколько работаешь - неважно. Минимально разумный начальник легко поймет, что дешевле сразу застраховаться от беды, чем потом волосы рвать и виноватых искать. А если считается, что техника сверхнадежна и люди не ошибаются - лучше сразу ищи новое место работы. Поскольку тебя уже назначили крайним.

Цитата

 Так что план пока--сделать БД на 1 компе, резервно вручную его втихомолку копировать, потом, когда накроется---достать из рукава=).

Ну-ну. Так БД и останется на 1 компе. Размечтался. От тебя втихомолку расползется и будешь только копированием заниматься. Пока вконец не запутаешься. Нет смысла такие задачи иметь в 1 экземпляре - не окупится даже разработка: дешевле тебя сразу на учет кредитования усадить, чем кого-то на нем держать, а тебе для него программу писать.

Файл-сервер в конторе наверняка есть. Поэтому:
1. Ставишь втихомолку SQL-сервер. Бэкапишь - на файл-сервер. Каждый вечер - недельным циклом + помесячно - в долгое хранение. Если очень хочется  секса стоя в гамаке на лыжах smile - на 1 машине крутишь MS Jet, а с остальных клиентами с Jet-ом работаешь. Упаси боже с БД напрямую работать - потом больно будет вспоминать.
2. СРАЗУ обеспечиваешь парольный вход - клиент БД уже не расползется по юзерам бесконтрольно и при небольшом старании (читай Уфимцева на SQL.RU) всегда будет известно, кто насвинячил. С датой, временем и т.п.

Ну и вдогонку: читай тут Пока не поздно.

PM MAIL   Вверх
RideX
Дата 27.9.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 1
Всего: 7



Сарт, вот тебе основа, проверки и всё остальное, думаю, сам сможешь накрутить. База данных MS Access, обращение через запросы, думаю ты этого хотел? На пустую форму положи DBGrid, Edit и две кнопки. Всё остальное создаём в runtime и работаем как обычно.
Код

unit Project1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, ComCtrls;

type
  TfmMain = class(TForm)
    btnNewDB: TButton;
    DBGrid1: TDBGrid;
    btnSearch: TButton;
    Edit1: TEdit;
    procedure btnNewDBClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnSearchClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmMain: TfmMain;

implementation

{$R *.dfm}

uses DB, ADODB, ComObj;

const
  dbName            : String = 'mybase.mdb';
  MasterTable       : String = 'MyMasterTable';

var
  ADOCommand        : TADOCommand;
  ADOConnection     : TADOConnection;
  ADODataSetMaster  : TADODataSet;
  MasterDataSource  : TDataSource;
  strCmdText        : String;
  strConnectString  : String;


procedure TfmMain.FormCreate(Sender: TObject);
begin
  // Строка для подключения к базе
  strConnectString := 'Provider=Microsoft.Jet.OLEDB.4.0' +
                      ';Data Source=' + dbName +
                      ';Jet OLEDB:Engine Type=5';

  // Создаём переменные и подключаемся к базе
  ADOConnection := TADOConnection.Create(nil);
  ADOConnection.ConnectionString := strConnectString;
  ADOConnection.LoginPrompt := False;
  ADOConnection.Mode := cmReadWrite;
  ADOConnection.Connected := True;

  ADOCommand := TADOCommand.Create(nil);
  ADOCommand.Connection := ADOConnection;
  ADOCommand.CommandType := cmdText;

  ADODataSetMaster := TADODataSet.Create(nil);
  ADODataSetMaster.Connection := ADOConnection;
  ADODataSetMaster.CommandType := cmdText;
  ADODataSetMaster.CommandText := 'SELECT * FROM ' + MasterTable;
  ADODataSetMaster.Active := True;

  MasterDataSource := TDataSource.Create(nil);
  MasterDataSource.DataSet := ADODataSetMaster;

  // Выводим данные в DBGrid
  DBGrid1.DataSource := MasterDataSource;
end;

procedure TfmMain.btnNewDBClick(Sender: TObject);
var
  ADOX: OLEVariant;
  i: integer;
  j: int64;
begin
  // Создаем базу
  ADOX := CreateOleObject('ADOX.Catalog');
  ADOX.Create(strConnectString);
  ADOX := NULL;

  // Подключаемся к созданной базе
  ADOConnection := TADOConnection.Create(nil);
  ADOConnection.ConnectionString := strConnectString;
  ADOConnection.LoginPrompt := False;
  ADOConnection.Mode := cmReadWrite;
  ADOConnection.Connected := True;

  ADOCommand := TADOCommand.Create(nil);
  ADOCommand.Connection := ADOConnection;
  ADOCommand.CommandType := cmdText;

  // Создаём в базе таблицу
  strCmdText := 'CREATE TABLE ' + MasterTable +
                '([id] COUNTER,'+
                '[ИНН] DECIMAL PRIMARY KEY NOT NULL UNIQUE,' +
                '[Имя] VARCHAR(150) WITH COMPRESSION,' +
                '[Адрес] VARCHAR(150) WITH COMPRESSION,' +
                '[Телефон] VARCHAR(150) WITH COMPRESSION)';
  ADOCommand.CommandText := strCmdText;
  ADOCommand.Execute;

  // Просто пример, добавляем данные в таблицу
  j := 665906037862;
  for i := 193 to 196 do begin
    strCmdText := 'INSERT INTO ' + MasterTable +
                  '(ИНН, Имя, Адрес, Телефон) VALUES'+
                  '("' + IntToStr(j) + '", "'+Chr(Ord(i))+'иванов", "улица, дом", "(343)123-45-67")';
    ADOCommand.CommandText := strCmdText;
    ADOCommand.Execute;
    Inc(j, 100000000000);
  end;
end;

procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Освобождаем переменные
  if ADOConnection <> nil then begin
    ADOConnection.Connected := False;
    ADOConnection.Free;
    ADOConnection := nil;
  end; 
  if ADOCommand <> nil then begin
    ADOCommand.Free;
    ADOCommand := nil;
  end;
  if ADODataSetMaster <> nil then begin
    ADODataSetMaster.Active := False;
    ADODataSetMaster := nil;
  end;
  if MasterDataSource <> nil then begin
    MasterDataSource.Free;
    MasterDataSource := nil;
  end;
end;

procedure TfmMain.btnSearchClick(Sender: TObject);
begin
  DBGrid1.DataSource.DataSet.DisableControls;

  // Пример, поиск в таблице по полю [Имя], по известному началу строки
  ADODataSetMaster.Active := False;
  strCmdText := 'SELECT * FROM '+ MasterTable + ' WHERE [Имя] LIKE "'+ Edit1.Text + '%"';
  ADODataSetMaster.CommandText := strCmdText;
  ADODataSetMaster.Active := True;

  DBGrid1.DataSource.DataSet.EnableControls;
end;

end.


Добавлено @ 09:13 
Поиск по любому вхождению делай так:
Код

LIKE "%искомая_строка%"


если только по концу, то соответственно так:
Код

LIKE "%искомая_строка"


Hint: например, через поле таблицы [ИНН] удобно привязать связанную подчинённую таблицу, а то бывает такой кошмар, что люди делают по две, чуть ли в точности не дублирующие друг-друга таблицы. Получается, естественно, огромная избыточность. Образец этого недавно здесь видел, если найду ссылку, добавлю сюда для ознакомления.

P.S. Конечно, если будешь обращаться к данным из других форм, перенеси переменные fmMain в глобальные для всего приложения.

Это сообщение отредактировал(а) RideX - 27.9.2006, 09:18
PM   Вверх
Сарт
Дата 27.9.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Сенкс, завтра испробуем на практике, отпишусь какие траблы возникнут=)
Блин со второго раза ткоа воткнул в чем разница между поисками=) а разница то в--%.
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
Rodman
Дата 27.9.2006, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Savek, а у тебя нет подобный примеров для других СУБД??? или откуда ты вытянул напиши... пожалуйста...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.