Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [Delphi6] cancellazione record con relazioni

    Ciao a tutti,
    sono ancora io!!!(per l'ultima volta)

    Volevo fare una cancellazione del record ma mi sono accorto che ho delle relazioni del database.
    Posto il codice:

    codice:
    procedure TForm3.AQ1BeforeDelete(DataSet: TDataSet); 
    begin    
    AQ1.SQL.Clear;   
    AQ1.SQL.Add('DELETE FROM Studenti '+               
    'WHERE studenti.IdClaFk = '+numId_Classe+' ');   
    AQ1.Open;   
    AQ1.First;   
    end;
    Il problema è che non riesce a trovare l'IDClaFk, come faccio a passarglielo?

    - MODIFICA-
    Come faccio a trovare l'ID dello studente che vuole cancellare?

  2. #2
    -MODIFICA-
    il problema è un altro... come faccio a sapere quali relazioni cancellare?

  3. #3

    Re: [Delphi6] cancellazione record con relazioni

    Originariamente inviato da DvdDelphi
    Volevo fare una cancellazione del record ma mi sono accorto che ho delle relazioni del database.
    Posto il codice:

    codice:
    procedure TForm3.AQ1BeforeDelete(DataSet: TDataSet); 
    begin    
    AQ1.SQL.Clear;   
    AQ1.SQL.Add('DELETE FROM Studenti '+               
    'WHERE studenti.IdClaFk = '+numId_Classe+' ');   
    AQ1.Open;   
    AQ1.First;   
    end;
    Il problema è che non riesce a trovare l'IDClaFk, come faccio a passarglielo?
    Io sono un nabbone lo ammetto, studio l'ambiente Embarcadero (delphi per la precisione) da un paio di annetti, dunque sono ancora un novellino, forse per questo non riesco a capire cosa vuoi fare.
    Come puoi mettere nel before delete di AQ1, che deve essere una TADOQuery, una delete su se stessa ?? altro particolare, quando usi un comando di delete, insert e update non puoi dire al componente "dataset" di aprirsi perchè il suo recordresult sarà null in quanto l'istruzione (delete in questo caso) non porta indietro niente, ma dovrai usare il comando Execute, poi .... hai fatto una open su un dataset senza controllare che sia chiuso, hai chiamato il metodo first, il quale è inutile in quanto il "puntatore a record" del dataset è già al primo record

    Per una semplice cancellazione ti basta il comado <dataset>.delete, poi nell'evento OnBeforeDelete del dataset in questione fai i controlli cancellando eventuali record figli (in altre tabelle) tenuti insieme da FK o relazioni varie.

    N.

  4. #4
    Per l'open e il first, io li metto sempre quando faccio una query e non mi ha mai dato problemi, anzi il mio prof mi ha consigliato di fare così !

    Poi per la cancellazione, allora faccio:
    codice:
     AQ1.Delete;
     
    AQ1.SQL.Clear;   
    AQ1.SQL.Add('DELETE FROM registro '+               
    'WHERE registro.IdStuFk='+numId_Studente+' ');   
    AQ1.Open;   
    AQ1.First;

  5. #5
    Mi va in stack overflow.......
    xD

  6. #6
    Adesso mi da errore "il provider corrente non supporta la restituzione di setdi record multiplida un'unica esecuzione"

    HELP!!!!!!!!

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282
    Ci fa piacere continuare a essere aggiornati su tutti gli errori che ottieni, ma se non dici dove riscontri gli errori, se non dai mai dettagli sul contesto, se non posti mai il codice corrispondente, se non fornisci in breve le informazioni che servono per darti una mano, non serve a nulla.

    Nessuno è qui per perdere tempo, quindi porta avanti le discussioni come si deve, altrimenti verranno chiuse.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    ok è vero.... però ormai dovresti essere abituato (scherzo ovviamente)
    allora io ho tre tabelle nel database, partendo da sinistra ho la classe collegata con gli studenti collegata con il registro(voti).

    adesso dovrei fare la cancellazione del nome dello studente. Quindi quando cancello devo cancellare la chiave esterna della classe(non dovrebbe essere un problema perchè si trova nella tabella studenti) e la chiave esterna degli studenti e i relativi voti nella tabella registro.
    ho provato ad usare il linguaggio sql:
    AQ1.SQL.Clear;
    AQ1.SQL.Add('DELETE FROM Studenti, registro '+
    'WHERE studenti.IdStuPK='+NumId_Studente+'AND '+
    'registro.IdStuFk='+NumIdStudente+'');
    AQ1.Open;
    AQ1.First;

    Mi da il seguente errore "Specifiare la tabella contenente i record da eliminare"


    spero che sono stato chiaro!!!

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282
    Originariamente inviato da DvdDelphi
    AQ1.SQL.Add('DELETE FROM Studenti, registro '+
    'WHERE studenti.IdStuPK='+NumId_Studente+'AND '+
    'registro.IdStuFk='+NumIdStudente+'');
    Ripassa la sintassi del comando DELETE, innanzitutto.

    In secondo luogo, devi eseguire un ADOCommand, e non un ADOQuery con Open e First, perché non puoi fare la "open" di nulla dato che l'istruzione non è una SELECT.

    Originariamente inviato da DvdDelphi
    spero che sono stato chiaro!!!
    A parte la grammatica, ciò che ormai è chiaro - come ti ho scritto altrove - è che stai raffazzonando roba senza approfondire come funziona; in questo senso, è inutile anche aprire discussioni qui o altrove e chiedere ad altri di approfondire problemi che non derivano da ostacoli effettivi, ma solo dal fatto che stai usando un tool senza prima documentarti a riguardo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Niente da fare non vuole che io gli cancelli le relazioni... anzi mi dice che è impossibile eliminare il record. la tabella registro contiene dati correlati....
    io ho messo

    ADOCommand1.CommandText:= ('DELETE FROM registro '+
    'WHERE registro.IdStuFK='+NumId_Studente+' ');
    ADOCommand1.Execute;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.