Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание таблицы в Access, Помогите!! 
:(
    Опции темы
Grig
Дата 24.5.2005, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проблема в следующем:
Реализовать вот такой алгоритм в ADO
Если нет таблицы с таким именем, то создать ее с такими-то полями..
Как это сделать?


--------------------
        
PM MAIL ICQ   Вверх
<Spawn>
Дата 24.5.2005, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Примерно так:

Код

var
  Tables: TStringList;
begin
  Tables := TStringList.Create;
  try
    ADOConnection1.GetTableNames(Tables);
    if Tables.IndexOf('TableName') = -1 then
      ADOConnection1.Execute('CREATE TABLE TableName (Param1 Number not null primary key, ...)');
  finally
    FreeAndNil(Tables);
  end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
~FoX~
Дата 24.5.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



Код

try 
    ADOQuery1.DatabaseName := 'MyDb'; 

    with ADOQuery1.SQL do 
      begin 
        Add('Create Table MyTable'); 
        Add('( ID      AutoInc,       '); 
        Add('  Name    Char(255),      '); 
        Add('  Primary Key ( ID ) )   '); 
      end; 

    ADOQuery1.Active := true; 
except
    ShowMessage('опаньки');
end;
ADOQuery1.Active := false;




--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
neweraser
Дата 25.11.2009, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



smile не стал создавать новую тему, так как просто сильно туплю и не могу разобраться, хотя информации навалом. как мне создать новую таблицу в существующей открытой базе данных access без использования sql-запросов? например таблицу 'table1' c 4 полями: текст, дата, логическое и мемо?

Добавлено через 35 секунд
или ткните носом если можно  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 26.11.2009, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  25.11.2009,  23:56 Найти цитируемый пост)
как мне создать новую таблицу в существующей открытой базе данных access без использования sql-запросов? 

 smile А зачем такое условие?
Ну да, ответ "никак". smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 26.11.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



весело... значит компонент TADOQuery все равно придется добавлять?


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 26.11.2009, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  26.11.2009,  00:25 Найти цитируемый пост)
значит компонент TADOQuery все равно придется добавлять? 

Ну да, а чем он плох-то? По-моему, основная работа с Access и происходит в рамках TADOConnection и TADOQuery. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 26.11.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну так TADOConnection у меня на форме есть  smile а без TADOQuery нельзя? smile


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 26.11.2009, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  26.11.2009,  00:30 Найти цитируемый пост)
а без TADOQuery нельзя?

Нет, я, конечно, не берусь утверждать на 100%, что нельзя, но на 99% уверен, что нельзя, да и через запрос в любом случае - самый простой и понятный способ. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 26.11.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



жалко, не хотел в sql лезть, но придется.. для меня это что-то страшное если честно  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 26.11.2009, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  26.11.2009,  01:22 Найти цитируемый пост)
жалко, не хотел в sql лезть, но придется.. для меня это что-то страшное если честно

Я тебя уверяю, что если способ создания таблицы без SQL и существует, то он не менее страшен. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 26.11.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а это с использованием чего? smile и что мне нужно добавить на форму и что в uses?


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 26.11.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



А с помощью чего там к "парадоксу" подключаются, не знаю. smile 




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 26.11.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 neweraser - кидаешь на форму ADOQuery и ADOConnection. У ADOConnection свойство LoginPrompt ставишь в false. Далее вот тебе код:

Код

procedure TForm1.FormCreate(Sender: TObject);
begin
 //где my_db.mdb - полный путь и имя бд. В данном случае бд лежит
 //в одной папке с исполняемым файлом
 ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data ' +
 'Source=my_db.mdb;Persist Security Info=False';
 try
   ADOConnection1.Connected:= true;
   ADOQ1.Connection:= ADOConnection1;
   ShowMessage('Успешно подключились к бд');
 except
   ShowMessage('Ошибка подключения к бд')
 end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOQ1.Active:= false;
 ADOQ1.SQL.Clear;
 ADOQ1.SQL.Add('CREATE TABLE my_table (id int NOT NULL PRIMARY KEY , my_discription MEMO NULL);');
 ADOQ1.ExecSQL;
end;


язык SQL - довольно просто в понимании и очень гибок - рекомендую пользоваться именно запросами при работе с бд. Базовые понятия (SELECT, INSERT, UPDATE, CREATE, DELETE, DROP и др.) можно за пару часов и освоить и опробовать. + Почитать когда использовать ADOQuery.ExecSQL, а когда ADOQuery.Active. 

И еще при составлении SQL запросов - внимательно надо следить за кавычками, скобками, пробелами. Сам много раз напарывался на них.

Это сообщение отредактировал(а) Teleport - 26.11.2009, 23:13


--------------------
user posted image
user posted image 
PM MAIL   Вверх
neweraser
Дата 26.11.2009, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Teleport, а что можно сделать со строчкой
Код

ADOQ1.SQL.Add('CREATE TABLE my_table (id int NOT NULL PRIMARY KEY , my_discription MEMO NULL);');

если я создаю таблицу с 30-40 полями? т.е. как ее разбить чтоб не в одну строчку?

Добавлено через 2 минуты и 32 секунды
или постоянно прописывать
Код

With ADOQuery.SQL do
  begin
    Add('CREATE TABLE example');
    Add('(id INT, data VARCHAR(100));');
    ...
    ...
  end;
?


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 26.11.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  26.11.2009,  23:39 Найти цитируемый пост)
или постоянно прописывать

Или так, или же добавлять поля через ALTER TABLE...


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 26.11.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в общем разобрался, а как это через ALTER TABLE? 
истина где-то рядом  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Teleport
Дата 26.11.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нну да это решение. Можно ADD ставить. 
А можно просто как обычную строку соединять явно:

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOQ1.Active:= false;
 ADOQ1.SQL.Clear;
 ADOQ1.SQL.Add('CREATE TABLE'+
 ' my_table (id int NOT NULL PRIMARY KEY,'+
 ' my_discription MEMO NULL);');
 ADOQ1.ExecSQL;
end;


Только в этом случае надо следить за пробелами при соединении строк - в данном примере критичен пробел перед my_table. Если пробела не будет, то слипнуться слова TABLEmy_table  - запрос не выполнится - выдаст ошибку.

А когда много раз ADD - вроде без пробела прокатывает. Я так понимаю - это символ переноса строки добавляется.

Код

 ADOQ1.Active:= false;
 ADOQ1.SQL.Clear;
 ADOQ1.SQL.Add('CREATE TABLE');
 ADOQ1.SQL.Add('my_table (id int NOT NULL PRIMARY KEY,');
 ADOQ1.SQL.Add('my_discription MEMO NULL);');
 ADOQ1.ExecSQL; 


Как удобней - решай сам  smile 


Это сообщение отредактировал(а) Teleport - 26.11.2009, 23:56


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 27.11.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Код

alter table BASE add column POLE1 char(6)

 smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 27.11.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 neweraser - вот очень в тему и очень доступно написано:
Краткое пособие по SQL
Основные команды, в том числе и ALTER TABLE. Думаю будет понятно. 
Про Alter Table:
"В уже существующей таблице мы можем поменять тип столбца, добавить новый, уничтожить старый."

Это сообщение отредактировал(а) Teleport - 27.11.2009, 00:04


--------------------
user posted image
user posted image 
PM MAIL   Вверх
neweraser
Дата 27.11.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

With ADOQuery.SQL do
  begin
    Add('CREATE TABLE example');
    Add('ALTER TABLE base.mdb add column Field1 Integer');
    Add('ALTER TABLE base.mdb add column Field2 char(6));
    ...
    ...
    ...
  end;

а вот так можно? smile

Добавлено через 23 секунды
только все равно ошибку синтаксиса выдает


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 27.11.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  27.11.2009,  00:15 Найти цитируемый пост)
CREATE TABLE example

Таблица без полей быть не может. Т.е. при создании надо добавить хотя бы одно поле:
Код

query.Close;
query.SQL.Clear;
query.SQL.Add('create table example(pole1 char (100), pole2 char (20), pole3 numeric)');
query.ExecSQL;


Цитата(neweraser @  27.11.2009,  00:15 Найти цитируемый пост)
ALTER TABLE base.mdb add column Field1 Integer

 smile Ты не можешь добавить поле к базе данных (base.mdb); поле можно добавить только к таблице. smile 

Код

query.Close;
query.SQL.Clear;
query.SQL.Add('alter table example add column pole4 char (100) ');
query.ExecSQL;





Это сообщение отредактировал(а) Данкинг - 27.11.2009, 00:21


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 27.11.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не, все. разобрался!
Код

With ADOQuery.SQL do
  begin
    Add('CREATE TABLE example');
    Add('(1 INTEGER,');
    Add('2 INTEGER,');
    Add('3 INTEGER,');
    Add('4 INTEGER,');
    Add('5 INTEGER);');
  end;

Всем спасибо!!  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Teleport
Дата 27.11.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 neweraser - подключение к бд ACCESS, в данном случае, выпоняется компонентом ADOConnection. 
Код

ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data ' +
 'Source=my_db.mdb;Persist Security Info=False';


Потом говоришь ADOQuery, чтобы он посмотрел в ADOConnection - к какой бд запрос посылать:
Код

ADOQ1.Connection:= ADOConnection1;


А при работе с таблицами теперь не надо компоненту ADOQuery указывать бд. Только имена таблиц и команды запроса. 

Цитата

Код

    Add('CREATE TABLE example');
    Add('(1 INTEGER,');
    Add('2 INTEGER,');
    Add('3 INTEGER,');
    Add('4 INTEGER,');
    Add('5 INTEGER);');



а если поля так вот и попрядку идут - тут цикл можно организовать...


Это сообщение отредактировал(а) Teleport - 27.11.2009, 00:54


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Grig
Дата 27.11.2009, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



археологам салют! я аж помолодел прям вместе с вами =)))


--------------------
        
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0725 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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