Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание связи 2 таблиц Paradox через SQL 
:(
    Опции темы
lodochnick
Дата 15.1.2008, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день.
Я создаю локально 2 таблицы Paradox через SQL. В справке нашел как создавать Вторичный ключ (Secondary Indexes). Но не могу найти как связать эти таблицы при помощи SQL.
Код

with Q.SQL do //создаем таблицу со списком студентов
           begin
            Add('Create Table Students');
            Add('( Name    Char(40),      ');
            Add(' N      AutoInc,        ');
            Add('  Primary Key ( Name ))    ');
          end;
 Q.ExecSQL;
   q.SQL.Clear;//очищаем запрос и  создаем новую таблицу
    with Q.SQL do
         begin
           Add('Create Table Lesson_list');
          Add('( N      AutoInc,       ');
         Add('  Name    Char(40),      ');
       Add('  Primary Key ( N ),  ');
  Add('Foreign Key Name Rreferences Students ( Name ) )    ');//эта строчка не работает
 end;
 Q.ExecSQL;

Таблицы нужно связать по полю Name для обеспечения целостности. В Database Desktop связывать таблицы paradox можно, а вот через sql - не получаеться.
PM   Вверх
Frees
Дата 15.1.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



Код

with Q.SQL do begin//создаем таблицу со списком студентов
  Add('Create Table Students');
  Add('( Name    Char(40),      ');
  Add(' N      AutoInc,        ');
  Add('  Primary Key ( N ))    ');
  ExecSQL;
  Close;
  Clear;//очищаем запрос и  создаем новую таблицу
  Add('Create Table Lesson_list');
  Add('( N      AutoInc,       ');
  Add('  Students_N    Integer,      ');
  Add('  Primary Key ( N ),  ');
  Add(' Foreign Key (Students_N) Rreferences Students ( N ) )    ');
  ExecSQL;
end;



Цитата(lodochnick @  15.1.2008,  02:17 Найти цитируемый пост)
Таблицы нужно связать по полю Name для обеспечения целостности

Name это у тебя Char(40) не думаю что это правельно связывать по имени связывать надо по первичному ключу


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
lodochnick
Дата 15.1.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пасибо за ответ. Но всеравно не работает :-( Пишет  "Capability not Supported. Token: Foreign ". Там еще в слове "References" была опечатка.
Может я не правильно задал вопрос? Суть проблемы в следующем. Создаеться 2 таблицы: "Студенты" и "Лист учета". В таблице "Студенты" запись  о каждом студенте одна, а в таблице "Лист учета" студенты могут повторяться. Т.е. получается связь один-ко-многим, где "Студенты" - главная таблица, "Лист учета" - подчиненная. Если меняем фамилию в таблице "Студенты", то она должна меняться в таблице "Лист учета". Поэтому мне и нужно было связать таблицы по полю Name.

PM   Вверх
Vas
Дата 16.1.2008, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А без ключа БД работать не будет smile Ну сделай две таблицы, одинаковое поле в обоих (в одной из них оно же первичный ключ, поле лучше делать числовое). А потом все равно в компонентах дельфи тебе придется самому связки делать один ко многим, так что ключ тут не помошник. Имхо, единственный его плюс обеспечение целостности при удалении записи из главной таблицы.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
lodochnick
Дата 16.1.2008, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Vas @  16.1.2008,  08:23 Найти цитируемый пост)
Имхо, единственный его плюс обеспечение целостности при удалении записи из главной таблицы. 

Вот это мне и нужно: обеспечить целостность!
Если из главной таблицы будет удаляться запись, то чтобы в подчинненых она тоже удалялась.
Таким образом я хочу избежать "мусора" в подчинёных таблицах после удаления из главной.
Если кто-то знает как правильно обеспечить целостность через SQL, то напишите smile  Очень не хочеться программно следить за удалением.

Добавлено через 8 минут и 43 секунды
Цитата(Vas @  16.1.2008,  08:23 Найти цитируемый пост)
А без ключа БД работать не будет  
 
Это утврждение или вопрос?

Это сообщение отредактировал(а) lodochnick - 16.1.2008, 09:59
PM   Вверх
Frees
Дата 16.1.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



может в парадоксе поле внешнего ключа одинаково с первичным ключом должно называться

Код


with Q.SQL do begin//создаем таблицу со списком студентов
  Add('Create Table Students');
  Add('( Name    Char(40),      ');
  Add(' Students_N      AutoInc,        ');
  Add('  Primary Key ( Students_N ))    ');
  ExecSQL;
  Close;
  Clear;//очищаем запрос и  создаем новую таблицу
  Add('Create Table Lesson_list');
  Add('( N      AutoInc,       ');
  Add('  Students_N    Integer,      ');
  Add('  Primary Key ( N ),  ');        
  Add(' Foreign Key (Students_N) References Students ( Students_N ) )  ON DELETE CASCADE  ') ;
  ExecSQL;
end;





Это сообщение отредактировал(а) Frees - 16.1.2008, 11:17


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
lodochnick
Дата 16.1.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пробывал такой код:
Код

with Query1 do begin//создаем таблицу со списком студентов
  SQL.Add('Create Table Students');
   SQL.Add('( Students_N      AutoInc,      ');
   SQL.Add('  Name    Char(40),       ');
   SQL.Add('  Primary Key ( Students_N ))    ');
  ExecSQL;
  Close;
   SQL.Clear;
 SQL.Add(' CREATE INDEX CustDate ON "Students" (Students_N) ');
  ExecSQL;
  Close;
   SQL.Clear;//очищаем запрос и  создаем новую таблицу
   SQL.Add('Create Table Lesson_list');
   SQL.Add('( N      AutoInc,       ');
   SQL.Add('  Students_N    Integer,      ');
   SQL.Add('  Primary Key ( N ),  ');
   SQL.Add('  Foreign Key (Students_N) References Students ( Students_N )  )  ') ;
  ExecSQL;
 end;

Все равно не получаеться! Пишет, что не знает слово Foreign.
Раз не получается, то наверно нельзя. Буду соблюдать целостность программно.
Считаю тему закрытой.
PM   Вверх
Lunatikus
Дата 18.1.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



попробуй вместо foreign так:

Код

with Query1 do begin//создаем таблицу со списком студентов
  SQL.Add('Create Table Students');
   SQL.Add('( Students_N      AutoInc,      ');
   SQL.Add('  Name    Char(40),       ');
   SQL.Add('  Primary Key ( Students_N ))    ');
  ExecSQL;
  Close;
   SQL.Clear;
 SQL.Add(' CREATE INDEX CustDate ON "Students" (Students_N) ');
  ExecSQL;
  Close;
   SQL.Clear;//очищаем запрос и  создаем новую таблицу
   SQL.Add('Create Table Lesson_list');
   SQL.Add('( N      AutoInc,       ');
   SQL.Add('  Students_N    Integer,      ');
   SQL.Add('  Students_N int NULL References Students ( Students_N ),  ') ;
   SQL.Add('  Primary Key ( N ))  ');
  ExecSQL;
 end;




--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
NiCketT
Дата 28.1.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не выполняется запрос на выборку к БД Paradox. Пишет Invalid field name. Пробовал как чере Делфи, так и через DatabaseDesktop.
Код

SELECT Products.db.Name as ProdName, Sales.db.'Count', Products.db.Price,
 Sales.db.'Count'*Products.db.Price as FullPrice
FROM Sales.db INNER JOIN Products.db ON ales.db.Product=Products.db.Product_id;

Где тут собака зарыта?
PM MAIL   Вверх
Lunatikus
Дата 29.1.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



странное у тебя поле 'Count'.Зачем кавычки?


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Frees
Дата 29.1.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



Цитата(Lunatikus @  29.1.2008,  09:50 Найти цитируемый пост)
странное у тебя поле 'Count'.Зачем кавычки?

слово count зарезервировано поэтому и в ковычках
может здесь и зарыта сабака 

Код

SELECT 
      PR.Name as ProdName, 
      --SL.'Count',
      PR.Price
      --,SL.'Count'*PR.Price as FullPrice
FROM Sales.db SL 
    INNER JOIN Products.db PR ON( SL.Product=PR.Product_id )


а такой запрос работат?


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


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

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