Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > куда написать запрос на создание таблицы в бд?


Автор: Teleport 25.10.2008, 01:58
вот создаю БД программно:
Код

uses Comobj;
... 
procedure TForm1.Button1Click(Sender: TObject);
var
  AdoEngine: Variant;
begin
  if not FileExists('Base.Mdb') then begin
    try
      AdoEngine:= CreateOleObject('ADOX.Catalog');
      AdoEngine.Create('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Base.Mdb; Jet OLEDB:Engine Type=5;');
      AdoEngine.ActiveConnection.Close;
      AdoEngine:= Null;
    except on E:Exception do
      ShowMessage( E.Message );
    end;
  end
  else begin
    ShowMessage( 'БД уже существует!' );
  end;
end;


как мне таблицы теперь программно создавать в этой бд? я понимаю, что sql запросом. Примерно так:
('CREATE TABLE customer (First_Name char(50), Last_Name char(50), Address char(50))');
Но как мне его в моем коде прописать? Вообще как тут можно запрос любой прописать?

Автор: Данкинг 25.10.2008, 02:00
Цитата(Teleport @  25.10.2008,  02:58 Найти цитируемый пост)
Но как мне его в моем коде прописать? Вообще как тут можно запрос любой прописать? 

Подключайся к созданной БД через ADO, да прописывай. smile 
Вот мой пример (без комментариев, надеюсь, разберёшься, что и где я имел в виду):

Код

function CreateAccessDatabase(FileName: string): string;
var 
 cat: OLEVariant; 
begin 
 result := ''; 
 try 
   cat := CreateOleObject('ADOX.Catalog');
   cat.create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Filename + ';');
   cat := NULL; 
 except 
   on e: Exception do 
     result := e.message; 
 end; 
end;
...
CreateAccessDatabase(direr.Directory+'\base.mdb');
conn.Connected:=false;
pp:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+direr.Directory+'\base.mdb;Persist Security Info=False';
conn.ConnectionString:=pp;
conn.Connected:=true;
zapros.Close;
zapros.SQL.Clear;
zapros.SQL.Add('create table base (fileee char (100),ddate char (30), super_id numeric)');
zapros.ExecSQL;
ado.Active:=false;
ado.TableName:='base';
ado.Active:=true;



Автор: Teleport 26.10.2008, 00:49
2 Данкинг - неа, не все понятно  smile 
pp, conn, zapros, ado - как описать? я описал так:
Код

conn, pp, zapros, ado: Variant;


но мне пишет, что Invalid variant operation....

Автор: Данкинг 26.10.2008, 00:58
conn - adoconnection
pp - переменная типа string
zapros - adoquery
ado - adotable

Автор: Teleport 26.10.2008, 01:46
вот сделал как понял... выкладываю проект - где ошибка понять не могу... smile)
что я там не так сделал?

Автор: Данкинг 26.10.2008, 02:06
Цитата(Teleport @  26.10.2008,  02:46 Найти цитируемый пост)
вот сделал как понял... выкладываю проект - где ошибка понять не могу...

"Неверный файл проекта" там. smile Поэтому запустить не могу. Но явные ошибки у тебя - это в свойстве "connection" как adotable, так и adoquery не прописано adoconnection, к которому они должны подключаться. Т.е. тебе следует там указать "conn" (выбрать из списка).

Автор: Teleport 26.10.2008, 02:15
извини smile
может ошибка потому что я делал в 2007 делфи? 
из файла проекта нужно удалить строку
Код

 Application.MainFormOnTaskbar := True;

если это то, о чем я думаю!! smile

Автор: Данкинг 26.10.2008, 02:25
В смысле, файл ресурса неверный, а не проекта. smile Удаление строки не помогло, но я же тебе говорю, что исправить нужно. После этого ошибок вроде как быть не должно.

Автор: Teleport 26.10.2008, 02:40
да, спасибо)))) я удалил ADOConnection и прописал свойства ConnectionString у Ado и zapros. таблицы создаются smile)))
только ошибка вылазиет... при создании - это явно какой-то простой недочет по незнанию или невнимательности...
вот файлы проекта и сам exe. Посмотри пожалуйста на ошибку, если не трудно или запустится...)))

Добавлено через 6 минут и 37 секунд
всеее!!! исправил - имя таблицы, блин, неправильно написал!! Спасибо огромное))))))

Автор: Данкинг 26.10.2008, 02:53
Угу, явно что-то с именем таблицы. Запустил .exe, а проект так и не запускает, видимо, D7 не понимает проектов D2007. Хотя проекты D2005 понимает.

Автор: Teleport 26.10.2008, 03:17
Спасибо, вопрос решен   smile  ))))))))). Осталось подробнее разобраться что такое OLE на самом деле smile 

Автор: Hellen 15.1.2009, 21:45
Цитата

куда написать запрос на создание таблицы в бд? 


А ответа на этот вопрос я так и не нашла...........

Автор: Rodman 15.1.2009, 22:32
Hellen, в чем твой вопрос конкретно?

Автор: Hellen 15.1.2009, 22:38
Цитата

в чем твой вопрос конкретно?


Как создать и как организовать, куда написать запрос......

Использую  ADODataSet1,  ADOConnection1,  DataSours.
База Аксес.
 Необходимо чтоб пользователь смог создать таблицу.
Вообще у меня идея такая:
Пользователь вводит всякую разную информацию в едиты и в мемо,
А потом он нажимает кнопку сохранить, появляется окно с предложением ввести имя.
 (насамом деле это имя будущей таблицы)
Жмёт кнопку сохранить и данные из эдитов прыгают в поля созданой таблицы и POST.
 

Автор: Rodman 15.1.2009, 23:03
Изучи - http://forum.vingrad.ru/index.php?show_type=forum&showtopic=174138&kw=%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%B5%D0%B9%D1%88%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%B1%D0%B0%D0%B7%D0%BE%D0%B9.

а запросы в TADOQuery пишутся...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)