Fehlerbehandlung in ADOConnection ausschalten



  • Hallo,

    ich befülle hier eine Datenbank mit Messwerten, wobei es passieren kann (und darf) dass Werte (Uhrzeit) mehrfach vorhanden sind.
    In die Datenbank sollen aber keine doppelten Werte rein.

    Also dachte ich mir: Primary Index auf die entsprechenden Spalten und gut ist.

    Nun bricht mir aber das Programm ab, sobald versucht wird, einen schon vorhandenen Datensatz nochmal einzufügen.

    Wie kann ich die Fehlerbehandlung einfach abschalten oder wenigstens diesen
    einen Fehler so behandeln, dass darauf nicht mehr reagiert wird?

    Danke schonmal!



  • Dann frag doch vorher ab, ob der Index schon in deiner Tabelle existiert.



  • Dann kann ich auch auf den Index verzichten, ich wollte eine schnelle Lösung haben und habe deshalb den Index angelegt.

    DB ist übrigens MS SQL Server



  • Ehm da machst Du etwas falsch.

    Wenn Dein Index unique ist, dann läßt er keine doppelten Werte zu oder wenn Du schon in die Tabellenspalte z.B. Datum unique vereinbart hast.

    Bau Deine Tabelle doch so auf.

    IF exists (select 1 from INFORMATION_SCHEMA.TABLES 
    			where TABLE_NAME = 'Tabelle'
    			and TABLE_SCHEMA = 'dbo')
    BEGIN
    	drop table dbo.tabelle 
    END
    GO
    
    Create Table DBO.Tabelle (
    ROWID int indetity (1,1) NOT NULL unique, 
    DATUM datetime NULL, // oder Not Null, wie immer Du willst
    Messwert1 ...,
    Messwert2 ...,
    ...,
    CONSTRAINT [ROWID_Tabelle] PRIMARY KEY CLUSTERED 
    	(
    		[ROWID]
    	) WITH  FILLFACTOR = 90  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
    
    CREATE INDEX [XPK_Tabelle] ON DBO.Tabelle ([DATUM]) WITH  FILLFACTOR = 90 ON [PRIMARY]
    GO
    

    Das sollte gehen und ist SQL-Server Syntax. DB-User,Tabellenname sowie die Spaltennamen sind natürlich Beispiele. Lediglich ROWID ist ein ziemlich fester Begriff.



  • gut, nun habe ich gelernt, dass ich auch vorher einen select machen kann und ich weiss jetzt sogar, wie man eine tabelle aufbaut.

    nicht, dass ich sowas nicht schon vorher gewusst haette.

    Eigentlich warte ich noch drauf, dass mir einer sagt, dass ich das mit mysql machen soll.

    Dann gebe ich mir die Antwort nun mittlerweile selbst:

    In Visual C++, it depends on the method you are using to access the ADO libraries. With #import, use a try-catch block. Otherwise, C++ programmers need to explicitly retrieve the error object by calling GetErrorInfo.

    (gefunden bei M$)



  • prima Lösung.... 🙄



  • Sorry ich hab Deinen ersten Text falsch gelesen ...
    ... den Teil mit Du willst keine doppelten Werte ...

    Ich dachte, Du willst doppelte Werte->Schäm. (Wer richtig lesen kann ist klar im Vorteil.)

    Aber ein Insert in eine DB ohne Prüfung und hoffen, daß er das Insert abweist und dann die Fehlermeldung abfangen ist auch nicht gerade die feine englische Art.
    Du könntest dort ein Insert mit einem Not Exists einbauen. Dann muß er gar nicht erst abweisen, weil er vorher prüft.



  • Bist du bisher noch nicht auf die Idee gekommen deiner Tabelle einen einmaligen Index zu verpassen ?Dann kann niemals ein doppelter Eintrag angelegt werden.



  • Eigentlich warte ich noch drauf, dass mir einer sagt, dass ich das mit mysql machen soll.

    Prima Idee. Machs doch mit MySQL...



  • Achja und schau mal nach:

    UNIQUE



  • Bist du bisher noch nicht auf die Idee gekommen deiner Tabelle einen einmaligen Index zu verpassen ?Dann kann niemals ein doppelter Eintrag angelegt werden.

    Achja und schau mal nach:

    UNIQUE

    und jetzt lese ich nochmal meinen ersten Artikel

    Also dachte ich mir: Primary Index auf die entsprechenden Spalten und gut ist.

    Primary Index IST unique

    Aber ein Insert in eine DB ohne Prüfung und hoffen, daß er das Insert abweist und dann die Fehlermeldung abfangen ist auch nicht gerade die feine englische Art.

    Weiss ich, aber für einen schnellen Hack reicht mir das allemal.
    Das wird etwa ein halbes Jahr lang laufen und dann gehts eh in den Müll



  • alhambra schrieb:

    Eigentlich warte ich noch drauf, dass mir einer sagt, dass ich das mit mysql machen soll.

    Prima Idee. Machs doch mit MySQL...

    Das scheint der einzige Satz zu sein, den du gelesen hast. Auf jeden Fall gehen deine ganzen Posts am Thema vorbei.



  • Klugscheißer schrieb:

    alhambra schrieb:

    Eigentlich warte ich noch drauf, dass mir einer sagt, dass ich das mit mysql machen soll.

    Prima Idee. Machs doch mit MySQL...

    Das scheint der einzige Satz zu sein, den du gelesen hast. Auf jeden Fall gehen deine ganzen Posts am Thema vorbei.

    Du bist ja gemein... 😞 😃
    Es geht nichts am Thema vorbei.Wenn er weiss was UNIQUE ist, geht es Punkt(.) 😃



  • if(stoerti==Klugscheißer)
    {
      Troll=true;
    }
    


  • brrr schrieb:

    if(stoerti==Klugscheißer)
    {
      Troll=true;
    }
    

    Ich weiß aus zuverlässiger Quelle, daß stoerti!=Klugscheißer ist. Das war nämlich ich, der Klugscheißer.
    Ich hab am Anfang auch nicht verstanden, was der Threadstart eigentlich wollte, aber jetzt sollte das eigentlich klar sein, wenn man aufmerksam liest.



  • Also dachte ich mir: Primary Index auf die entsprechenden Spalten und gut ist.

    Da steht doch sein Problem.
    Neue Spalte Index fertich is.



  • if(stoerti==Klugscheißer) 
    { 
      Troll=true; 
    }
    else
    {
      Fincki=Troll;
    }
    


  • dieses Forum war früher mal gut



  • Ist es immernoch...
    Nur was ist mit den Fragestellern geworden ??? 🙄



  • Erwarten im BCB Forum Antworten zu SQL Grundlagen ... 🙄


Anmelden zum Antworten