Witam,
To jest mój pierwszy post tutaj na forum - witam wszystkich i proszę o zrozumienie:)
Mam problem z utworzeniem relacji pomiędzy dwoma tablicami.
Pierwsza tablica to:
SQLDataSet1.CommandText:='CREATE TABLE users ('+
'id INT(11) NOT NULL AUTO_INCREMENT,'+
'name VARCHAR(255) NOT NULL DEFAULT "",'+
'password VARCHAR(255) NOT NULL DEFAULT "",'+
'permissions SMALLINT(2) NOT NULL DEFAULT "0",'+
'UNIQUE KEY id (id)'+
') TYPE=MyISAM;';
if SQLDataSet1.ExecSQL(True) = 0 then ShowMessage('Table users created');
Druga tablica to:
SQLDataSet1.CommandText:='CREATE TABLE visualcontrol ('+
'id INT(11) NOT NULL AUTO_INCREMENT,'+
'number VARCHAR(255) NOT NULL DEFAULT "",'+
'name VARCHAR(255) NOT NULL DEFAULT "",'+
'date datetime NOT NULL DEFAULT "0000-00-00 00:00:00",'+
'result VARCHAR(16) NOT NULL DEFAULT "",'+
'controller_id INT(11) NOT NULL DEFAULT "0",'+
'UNIQUE KEY id (id)'+
') TYPE=MyISAM;';
if SQLDataSet1.ExecSQL(True) = 0 then ShowMessage('Table visualcontrol created');
Powstawiałem trochę danych do jednej i drugiej tablicy.
Polecenia:
SQLDataSet1.CommandText:='SELECT * FROM users';
SQLDataSet1.Open;
oraz:
SQLDataSet1.CommandText:='SELECT * FROM visualcontrol';
SQLDataSet1.Open;
dają poprawne rezultaty i odczytuję te dane tak jak powinny być.
Jednak, gdy chcę nawiązać relację pomiędzy tymi dwiema tablicami, gdzie visualcontrol.controller_id=users.id, tak jak poniżej:
SQLDataSet1.CommandText:='SELECT visualcontrol.id, visualcontrol.number, visualcontrol.name, visualcontrol.date, visualcontrol.result, visualcontrol.controller_id, users.name FROM (visualcontrol,users) WHERE (visualcontrol.controller_id=users.id)';
wyskakuje błąd, że nieznane jest sformułowanie users.id.
Gdy w klazuli:
FROM (visualcontrol,users)
zamienię miejscami te dwie tablice, błąd dotyczy wówczas visualcontrol.controller_id.
Podejrzewam, że w jakiś sposób TSQLDataSet obsługuje tylko jedną tablicę z klazuli FROM, a o drugiej nie chce słyszeć.
Zaznaczam, że ta komenda wypisana w phpMyAdmin działa całkiem poprawnie.
Czy ktoś może wie, w jaki sposób można zrobić tę relację, czy lepiej będzie użyć innych komponentów do tego celu (np. ADO?)
Pozdrawiam i dziękuję za podpowiedzi,
Wojtek
dodanie znaczników <code class="delphi"> - furious programming