Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.27;
Скачать: CL | DM;

Вниз

Работа со связанными таблицами Paradox   Найти похожие ветки 

 
Eugene_ ©   (2003-02-08 21:21) [0]

Есть восемь связанных таблиц. Связь один-ко-многим. Т.е. древовидная структура. Не получается сделать добавление в нужную таблицу.


 
kerkonst ©   (2003-02-08 21:25) [1]

А чуть-чуть подробнее можно ?

Таблица Master или Detail или как... .


 
Eugene_ ©   (2003-02-08 21:34) [2]

Не получается добавить в detail. Пишет, что неправильный ключ ... :-((


 
Pat ©   (2003-02-08 22:24) [3]

>Eugene_ © (08.02.03 21:34)
Возможно не устанавливаешь поля, по которым идет связь?


 
mike-d ©   (2003-02-08 22:52) [4]

опять игры в угадайку. пришли хоть кусок кода...

> Pat © (08.02.03 22:24)
> Возможно не устанавливаешь поля, по которым идет связь?
они должны автоматом ставиться если мастер-детайл


 
Eugene_ ©   (2003-02-09 08:32) [5]

Вот так не работает.

MainForm.TaraTable.Append;
MainForm.TaraTable.FieldValues["Name"]:=Edit1.Text;
MainForm.TaraTable.Post;

Поля в таблице такие:
Code (Number)
Code_s (Number) - связано с мастером
Name (Alpha)
Group (Number)

Поле Code (Внутренний код-порядковый номер записи), но не автоматический. Автоматический не получилось связать с мастером.
Так вот при добавлении новой записи мне нужно поле Code заполнить самому, в противном случае оно остается пустое. Просьба подсказать: Как я могу узнать последний порядковый номер во всей таблице?


 
mike-d ©   (2003-02-09 16:18) [6]

не совсем понял порядок полей и как ты их сумел связать с мастером, но для нормальной связки нужно делать так:
1. Code_s (Number) - ключ - для связки с мастером
2. Code (Number) - ключ для уникальности записей (его и можно сделать AutoInc)
3. так далее...

"последний порядковый номер во всей таблице" можно узнать SQL запросом


 
Eugene_ ©   (2003-02-09 16:24) [7]


> mike-d © (09.02.03 16:18)
> 1. Code_s (Number) - ключ - для связки с мастером
> 2. Code (Number) - ключ для уникальности записей (его и
> можно сделать AutoInc)


Я так и сделал, только поле Code (Number) у меня не AutoInc.
Вот для этого мне и нужно перед добавлением следующей записи узнать значение поля Code предыдущей записи. AutoInc мне не подходит.


 
mike-d ©   (2003-02-09 16:31) [8]

SELECT MAX(Code)
FROM "как_там_назвал_свою_таблицу"
можно еще добавить
WHERE Code_S=:Code_S
хотя впрочем и необязательно...


 
Eugene_ ©   (2003-02-09 19:49) [9]

Все равно так не работает.

Я пишу вот так:
MainForm.Query.DataSource:=MainForm.Level5;
MainForm.Query.Close;
MainForm.Query.SQL.Clear;
MainForm.Query.SQL.Add("select max(Code) From ".\Data\Tara.db"");
MainForm.Query.ExecSQL;
MainForm.Query.Open;
MaxN:=MainForm.Query.RecordCount;
MainForm.TaraTable.DisableControls;
MainForm.TaraTable.Last;
MainForm.TaraTable.Insert;
MainForm.TaraTable.FieldValues["Code"]:=MaxN;
MainForm.TaraTable.FieldValues["Code_s"]:=Main.Where;
MainForm.TaraTable.FieldValues["Name"]:=Edit1.Text;
MainForm.TaraTable.FlushBuffers;
MainForm.TaraTable.EnableControls;


Я так понимаю, что вот здесь --> MainForm.Query.RecordCount и должно быть общее кол-во записей, а тут все равно только текущее кол-во с мастера.


 
mike-d ©   (2003-02-09 20:29) [10]

однако...
давай по порядку:

Query: TQuery; - должен быть объявлен, и у него DataSource=nil, DatabaseName = текущему Alias

// Получение следующего максимального значения Code
// из всей таблицы TARA.DB
function GetNextId: Integer;
var
N: Integer;
begin
Query.SQL.Clear;
Query.SQL.Add("SELECT MAX(Code) AS MaxID FROM "tara.db"");
Query.Open;
N := Query.FieldByName("MaxID").AsInteger;
Query.Close;
Result := N + 1;
end;

если тебе приспичит выбирать максимальное из детайла этой таблицы, тогда примерно так

Query.SQL.Clear;
Query.SQL.Add("SELECT MAX(Code) AS MaxID FROM "tara.db"" +
WHERE Code_S=" + MainForm.Level5.FieldByName("Code_S").AsString);
Query.Open;

...
// вставка значения Code
procedure MainForm.TaraTableAfterInsert(DataSet: TDataSet);
begin
TaraTable.FieldByName("Code").AsInteger := GetNextId;
end;


 
Eugene_ ©   (2003-02-09 22:07) [11]

Спасибо тебе Михаил!
Я уже сам разобрался. Дело оказывается вот в чем:

Запрос у меня вополняется правильно. Только вот максимальное значение записей лежит не в "MainForm.Query.RecordCount" и даже не в "Query.FieldByName("MaxID").AsInteger", а в "MainForm.Query.FieldValues["Max OF Code"]" !!!

Там как раз было то число, которое и нужно. А узнал очень просто: взял твой пример запроса и открыл его в Database Desktop. Выполнил запрос и получил таблицу с одной записью, но двумя полями и вот в одном из них и было необходимое значение !!!

Еще раз спасибо ...



Страницы: 1 вся ветка

Текущий архив: 2003.02.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
1-87373
radion
2003-02-14 14:26
2003.02.27
Как написать чтоб Делпхи считал гласные и согласные буквы?


14-87711
michael_b
2003-02-09 21:58
2003.02.27
Про дополнительные компоненты


1-87495
race1
2003-02-16 09:13
2003.02.27
font


1-87438
nedlon
2003-02-18 16:41
2003.02.27
С Builder to Delphi


1-87528
ЮЮ
2003-02-17 08:37
2003.02.27
Русский интерфейс программы в