Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: Diego1981 - Luglio 28, 2016, 09:18:12 am

Titolo: MYSQL tabella molti a molti
Inserito da: Diego1981 - Luglio 28, 2016, 09:18:12 am
Ciao a tutti,è un po' che non mi faccio vivo ;D
volevo capire una cosa
sto usando zeosdb e mysql, ho 3 tabelle (tabella Output, Tabella Programma, Tabella OutProgramma,  tutte con proprietà CachedUpdate impostate a TRUE) la tabella OutProgramma è una tabella con relazione molti a molti, ovvero dovrebbe avere al suo interno le chiavi primarie della TABELLA Output e della TABELLA Programma.(il mio intento è quello di attivare degli output in base al programma scelto)
Le tabelle sono ovviamente collegate alle rispettive ZTable di Zeos, inoltre la tabella OutProgramma ha un relazione Master/detail con la tabella Programma di modo da poter visualizzare gli output in una dbgrid inerenti a quel solo programma e ovviamente aggiungerne o toglierne)
Per salvare il tutto prima eseguo l'applyupdate sulla tabella programmi e poi sulla tabella OutProgramma ma su quest'ultima ricevo l'errore da parte del db  che dice che la chiave primaria nella tabella OutProgramma non può essere nulla.
Questo avviene solo in fase di primo inserimento quando non esiste ancora l'indice della Tabella Programma. Ma non dovrebbe essere inserito in automatico da ZEOS?
Su di un altro programma ho fatto la stessa cosa e non mi ha dato problemi, ho cercato nelle varie impostazioni se ho settato qualcosa in modo doverso ma non riesco proprio a capire dove sta la differenza.
Spero di essermi spiegato

Grazie a tutti come sempre
Diego
Titolo: Re:MYSQL tabella molti a molti
Inserito da: xinyiman - Luglio 28, 2016, 09:31:59 am
Domanda stupida. Come fai l'inserimento?
Titolo: Re:MYSQL tabella molti a molti
Inserito da: Diego1981 - Luglio 28, 2016, 10:47:04 am
che fosse stupida non dubitavo  ;D
uso l'insert, poi inserisco il valore nel campo riferito all'output con il fieldbyname e poi faccio il post.
supponendo che il campo riferito al programma venga inserito automaticamente(in un altro programma che ho fatto me lo fa)
Titolo: Re:MYSQL tabella molti a molti
Inserito da: xinyiman - Luglio 28, 2016, 11:55:59 am
La domanda stupida era la mia e non la tua  ;)

Hai un esempio che replica l'errore in modo che possiamo darti una mano a capire come sistemare?
Titolo: Re:MYSQL tabella molti a molti
Inserito da: Diego1981 - Luglio 28, 2016, 12:41:38 pm
come posso fare a mostrarti qualcosa, essendo tutti componenti visuali non ho codice da mostrarti a parte quelle due righe che ti ho scritto prima :-\
Titolo: Re:MYSQL tabella molti a molti
Inserito da: xinyiman - Luglio 28, 2016, 10:05:15 pm
La struttura delle tabelle?
Titolo: Re:MYSQL tabella molti a molti
Inserito da: Diego1981 - Luglio 29, 2016, 08:06:05 am
può andare bene una parte del diagramma EER?
Titolo: Re:MYSQL tabella molti a molti
Inserito da: nomorelogic - Luglio 29, 2016, 10:06:06 am
che fosse stupida non dubitavo  ;D
uso l'insert, poi inserisco il valore nel campo riferito all'output con il fieldbyname e poi faccio il post.
supponendo che il campo riferito al programma venga inserito automaticamente(in un altro programma che ho fatto me lo fa)

sicuro che nell'altro programma non ci sia un evento tipo OnInsert dove imposti il valore del campo?
Titolo: Re:MYSQL tabella molti a molti
Inserito da: Diego1981 - Luglio 29, 2016, 10:45:43 pm
per un attimo ho temuto il peggio  ;D ;D ;D ;D (una figuraccia)
no nell'altro programma non ho inserito nessun evento nelle ztable.
Non riesco proprio a capire la differenza tra il programma che funziona e questo.
Anche nell'altro programma ho inserito la funzione Master/Detail e credo che sia proprio questo a far si che non ci sia bisogno di utilizzare nessun evento per l'inserimento dell'indice della tabella programma purchè l'applyupdate venga prima applicato su quella tabella...almeno penso

Titolo: Re:MYSQL tabella molti a molti
Inserito da: SB - Agosto 01, 2016, 08:02:21 am
Ciao a tutti,è un po' che non mi faccio vivo ;D
volevo capire una cosa
sto usando zeosdb e mysql, ho 3 tabelle (tabella Output, Tabella Programma, Tabella OutProgramma,  tutte con proprietà CachedUpdate impostate a TRUE) la tabella OutProgramma è una tabella con relazione molti a molti, ovvero dovrebbe avere al suo interno le chiavi primarie della TABELLA Output e della TABELLA Programma.(il mio intento è quello di attivare degli output in base al programma scelto)
Le tabelle sono ovviamente collegate alle rispettive ZTable di Zeos, inoltre la tabella OutProgramma ha un relazione Master/detail con la tabella Programma di modo da poter visualizzare gli output in una dbgrid inerenti a quel solo programma e ovviamente aggiungerne o toglierne)
Per salvare il tutto prima eseguo l'applyupdate sulla tabella programmi e poi sulla tabella OutProgramma ma su quest'ultima ricevo l'errore da parte del db  che dice che la chiave primaria nella tabella OutProgramma non può essere nulla.
Questo avviene solo in fase di primo inserimento quando non esiste ancora l'indice della Tabella Programma. Ma non dovrebbe essere inserito in automatico da ZEOS?
Su di un altro programma ho fatto la stessa cosa e non mi ha dato problemi, ho cercato nelle varie impostazioni se ho settato qualcosa in modo doverso ma non riesco proprio a capire dove sta la differenza.
Spero di essermi spiegato

Grazie a tutti come sempre
Diego

Prima di scrivere nella tabella OutProgramma ti sei preoccupato di salvare il record nella tabella Output? Altrimenti per forza ti dà un errore di chiave primaria mancante...
Titolo: Re:MYSQL tabella molti a molti
Inserito da: Diego1981 - Agosto 04, 2016, 07:25:14 am
Ciao SB
si, prima eseguo l'applyupdate sulla tabella programma e poi sull'output programma.
grazie
Titolo: Re:MYSQL tabella molti a molti
Inserito da: Diego1981 - Agosto 05, 2016, 11:31:16 am
Ciao ragazzi
visto che potrebbe essere utile a qualcun'altro, forse ho trovato la differenza e anche un articolo sul sito zeos (http://zeoslib.sourceforge.net/viewtopic.php?t=1269)
La differenza tra il programma che mi funziona e questo che non funziona sta nel fatto che la primary key in quello che funzione NON è in autoincrement mentre in questo che non funziona si e leggendo dall'articolo sembra che questo crei problemi

buona giornata
Diego
Titolo: Re:MYSQL tabella molti a molti
Inserito da: xinyiman - Agosto 05, 2016, 11:32:47 am
Ciao ragazzi
visto che potrebbe essere utile a qualcun'altro, forse ho trovato la differenza e anche un articolo sul sito zeos (http://zeoslib.sourceforge.net/viewtopic.php?t=1269)
La differenza tra il programma che mi funziona e questo che non funziona sta nel fatto che la primary key in quello che funzione NON è in autoincrement mentre in questo che non funziona si e leggendo dall'articolo sembra che questo crei problemi

buona giornata
Diego

Buono a sapersi per il futuro. Grazie
Titolo: Re:MYSQL tabella molti a molti
Inserito da: SB - Agosto 07, 2016, 08:17:50 am
Ciao ragazzi
visto che potrebbe essere utile a qualcun'altro, forse ho trovato la differenza e anche un articolo sul sito zeos (http://zeoslib.sourceforge.net/viewtopic.php?t=1269)
La differenza tra il programma che mi funziona e questo che non funziona sta nel fatto che la primary key in quello che funzione NON è in autoincrement mentre in questo che non funziona si e leggendo dall'articolo sembra che questo crei problemi

buona giornata
Diego

Basandomi su quello che hai scritto (e qualche dettaglio in più sarebbe stato utile) ribadisco che il problema, secondo me, sta nell'ordine di aggiornamento delle tabelle (come suggerito anche nel post da te citato)
Il discorso della primary key non è determinante e mette solo in evidenza il problema
Titolo: Re:MYSQL tabella molti a molti
Inserito da: Diego1981 - Agosto 08, 2016, 11:32:36 am
Ciao SB
nn hai tutti i torti, però se inserisco la primary key nella tabella master (dopo averla rilevata dal DB con il valore di Auto_increment) non ho problemi mentre se applico solamente l' applyupdate (prima sulla tabella master e poi su quella detail/salve) non va ad inserire tale valore e ritorna l'errore di mancato inserimente della chiave esterna.
Spero di essere stato un po' più chiaro
grazie
Titolo: Re:MYSQL tabella molti a molti
Inserito da: SB - Agosto 09, 2016, 07:45:14 am
Per come la vedo io... usare autoincrement serve solo a evitarti di dover stabilire un valore per la chiave primaria, quindi non è questo il tuo problema.
Da quel che capisco, tu ti aspetti che la chiave primaria venga automaticamente propagata alla tabella detail, il che non mi risulta sia vero in nessun database.
Non lo può fare il database che non può scrivere le foreign key di record che non hai ancora salvato.
Se lo facesse la libreria di interfaccia (e, visto l'errore, non lo fa) la scrittura dei record master/detail dovrebbe essere un'operazione atomica e quindi non avresti la necessità di eseguire più volte l'applyupdate...
Quindi, secondo me, devi prima salvare i due record master, quindi leggere le primary key assegnate e impostarle nella tabella detail per il salvataggio.
Titolo: Re:MYSQL tabella molti a molti
Inserito da: Diego1981 - Agosto 12, 2016, 09:09:30 am
Ciao SB
scusa se magari ti rispondo a giorni di distanza
direi che come dici tu non fa una piega ed ho utilizzato quella strada
ti ringrazio
Diego