Fehlermeldung "arithmetic execption"



  • Hallo,

    In der Schule hatten wir mal Datenbanke mit Delphi und Interbase. nun da ich damit fertig bin und derzeit Studiere wollte ich in meiner Freizeit eine Datenbank erstellen wo ich meine Serien speicher.

    Ich habe domains und eine Tabelle erstellt.

    mein erster Fehler ist das ich den Trigger nicht hinbekomme.

    heir der code

    Create Domain D_Nr as Integer Not Null;
    Create Domain D_Name VarChar(100);
    Create Domain D_Groesse Integer;
    
    Create Table T_Koenigin_der_1000_Jahre
    (
    Nr D_Nr,
    Name D_Name,
    Groesse D_Groesse,
    Primary Key (Nr)
    );
    
    Create Generator G_Koenigin_der_1000_Jahre;
    

    So mein problem ist der Trigger damit er wenn ich einen neuen datensatz hinzufüge er Automatisch hochzählt.

    SET TERM ^ ;
    
    CREATE TRIGGER Set_nr FOR T_Koenigin_der_1000_Jahre
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
    if (NEW.nr is Null) then
      NEW.nr = GEN_ID(T_Koenigin_der_1000_Jahre, 1);
    END
     ^
    
    COMMIT WORK ^
    SET TERM ;^
    

    Irgend wie funktioniert das nicht also hab ich ersmla manuell die Episoden nummer eingegeben.

    Dann hab ich die Datenbank in C++ Borland angebunden. Das geht auch bis auf eins wenn ich dann duch die Daten steppe dann bricht er nach dem 7ten Datensatz ab und sagt mir folgenden Fehler.

    Im Proekt DantenBank.exe ist ein Exeption der Klasse 
    EIBInterBaseError augetreten. Meldung: 'arithmetic execption, 
    numeric overflow, or string truncation
    Cannot transliterate character between character sets'. Prozess wurde angehalten.
    

    Ich habe die Datenbank genau so erstellt wie wir das in der schule hatte .. ok da hatte der leher noch andere sachen hinzugefügt mit den index und so (Videodatenbank). aber für meine Datenbank brauch ich nur die Tabelle den Name die nummer und grösse.

    Ich hoffe mir kann jemand helfen

    Ich werde die Datei mit der Datenbank mal zum download stellen damit man das vielleicht besser sehen kann.

    http://home.arcor.de/seby-deluxe/Datenbank.rar

    mfg Seby-Deluxe



  • Hi,

    Kann mir da keiner Helfen ?

    mfg Seby



  • Zu deinem Create kann ich mal nichts sagen da ich die Sprachfeatures von Interbase nicht kenne. Normalerweise sollte die Datenabank einen AutoIncrement auch ohne Trigger können.

    Dein anderen Problem hat nichts mit Datenbanken zu tun.
    Wenn du aber den Source aus der Schule einfach übernimmst ohne die gleichen DatenbankTables zu haben wundert es mich nicht wenn dein Programm versagt.
    Das ist aber ein Problem mit Borland und deine Frage gehört dort rein.
    Solltest du also keine Probleme mit der Datenbank mehr haben dann schreib es und ich verschiebe dich.



  • hi

    ok ich kann mir nicht vorstellen das es an der Datenbank liegt.

    Das C++ Programm hab ich neu angefangen. aber es kann sein das ich was vergessen habe aber was..

    kannst dan thread verschieben.

    mfg Seby



  • Nochmal Hi,

    Da mein Englisch nicht so gut ist komm ich auf der MySQL seite nicht so zurecht ^^ 👎

    Ich wollte gern MySQL auf meinem Rechner haben und auch verwalten, so das ich es vielleicht auch auf einen Server Spielen kann.

    Ich brauch da für ja SQL PHPAdmin und apache Server glaub ich .

    aber ich weiss nicht wo ich das alles Runterladen kann.

    Und ob das alles ist was ich brauche.

    ich hoffe da könnt ihr mir helfen.

    mfg Seby



  • Hallo,

    Unix-Toms Tipp:
    http://www.apachefriends.org/de/xampp.html
    Ich denke XAMPP hilft dir weiter:

    Die Distribution enthält unter anderem: Apache, MySQL, PHP & PEAR, Perl, ProFTPD, phpMyAdmin, OpenSSL, GD, Freetype2, libjpeg, libpng, gdbm, zlib, expat, Sablotron, libxml, Ming, Webalizer, pdf class, ncurses, mod_perl, FreeTDS, gettext, OpenLDAP (client), mcrypt, mhash, Turck MMCache, SQLite und IMAP C-Client.

    Was mir noch nicht ganz klar ist .. weshalb benutzt du hier Trigger?

    MfG

    P.S. Eine Frage an die Profis: gibt es bei MySQL soetwas wie AutoIncrement?



  • Ja, es gibt auto_increment.
    Hat aber jedes gute RDBMS.



  • Mir wurde das so in der Schule erklärt!

    Ich habe eine ID und wenn ich den datensatz in die Datenbank schreibe muss ich nicht ID 1 ID 2 schreiben sonder lass das einfach bei einer 0 damit zählt der bei Interbase hoch. aber irgend wie macht der das immer noch nicht.

    Tabelle mit ID Vorname Nachname

    Intert into T_Kunde (0,'Heins','Peter');
    Insert into T_Kunde (0,'Peter','Paul');
    

    Dann schreibt er als ID für den Heins ne 1 und für den Peter ne 2

    so wurde mir das erklärt .

    Aber ich wollte gern MySQL machen und da ich glaube das man auch MySQL mit C++ verknüpfen kann wollte ich das erstmal probieren. Weil mein vorteil dabei ist ich kann die gleiche Datenbank auch auf einen Server laden. und dafür dann eine Windows anwendung basteln.

    Aber erstmal wollte ich das dahein machen ohne einen externen Server. den erstell ich mir auf meinem Rechner.

    mfg Seby

    Ich guck mir mal dne Link an den du mir geschrieben hast... muss eben einkaufen.



  • Wenn du einen WSert für das Feld ID angibst dann nimmt er auch diesen Wert. In dienem Fall eine 0.
    Wenn das Feld aus auto_increment defniert ist dann reicht

    INSERT INTO T_Kunde SET Vorname = 'Peter',Nachname = 'Paul';
    Das sollte übrigend bei jedem RDBMS gehen da dies Standard ist.



  • Unix-Tom schrieb:

    INSERT INTO T_Kunde SET Vorname = 'Peter',Nachname = 'Paul';

    Verwechselst Du hier gerade INSERT und UPDATE?

    INSERT INTO Kunde 
    (Vorname, Nachname)
    VALUES ('Peter', 'Paul')
    

    Oder hab ich da was falsch verstanden?



  • Es geht beides.
    Zumindest bei ODBC/ACCESS und MySQL.



  • Dann werde ich das bei Gelegenheit mal auf unserer informix-DB ausprobieren. Die Variante mit SET xxx = yyy kenne ich nur aus den Update-Statements. Danke für die Info.



  • Also um bei Interbase eine Datenbank zu erstelnnen muss ich das alles machen

    Ich muss den Trigger machen wenn ich es mir vereinfach (Das Hochzählen der Folgen z.B oder kunden ID

    Domain:
    
    Create Domain D_Nr as Integer Not Null;
    Create Domain D_Name VarChar(100);
    Create Domain D_Groesse Integer;
    
    Tabelle T_Koenigin_der_1000_Jahre:
    
    Create Table T_Koenigin_der_1000_Jahre
    (
    Nr D_Nr,
    Name D_Name,
    Groesse D_Groesse,
    Primary Key (Nr)
    );
    
    Generator:
    
    Create Generator G_Koenigin_der_1000_Jahre;
    
    Trigger:
    
    Wie im ersten post nur der geht halt net.
    
    Dateninhalt:
    
    Insert Into T_Koenigin_der_1000_Jahre Values (1,'09.09.1999 um 9:00',221);
    Insert Into T_Koenigin_der_1000_Jahre Values (2,'Das unendliche All',211);
    Insert Into T_Koenigin_der_1000_Jahre Values (3,'Die Diebe der tausend Jahre',223);
    Insert Into T_Koenigin_der_1000_Jahre Values (4,'Ein Meteorit verschwindet',227);
    Insert Into T_Koenigin_der_1000_Jahre Values (5,'Yayoi kehrt zurueck',189);
    Insert Into T_Koenigin_der_1000_Jahre Values (6,'Die unterirdische Stadt',192);
    Insert Into T_Koenigin_der_1000_Jahre Values (7,'Der Stuetzpunkt unter der Erde',187);
    Insert Into T_Koenigin_der_1000_Jahre Values (8,'Das mißlungende Experiment',203);
    Insert Into T_Koenigin_der_1000_Jahre Values (9,'Der Weg zum heiligen Grab',207);
    Insert Into T_Koenigin_der_1000_Jahre Values (10,'Das Abenteuer am heiligen Grab',212);
    Insert Into T_Koenigin_der_1000_Jahre Values (11,'Freund oder Feind',189);
    Insert Into T_Koenigin_der_1000_Jahre Values (12,'Das Geheimnis des Teleskops',195);
    Insert Into T_Koenigin_der_1000_Jahre Values (13,'Flucht im Morgengrauen',174);
    Insert Into T_Koenigin_der_1000_Jahre Values (14,'Das Geheimnis der Koenigin',213);
    Insert Into T_Koenigin_der_1000_Jahre Values (15,'Duell in der Nacht',171);
    Insert Into T_Koenigin_der_1000_Jahre Values (16,'Der Ueberfall',190);
    Insert Into T_Koenigin_der_1000_Jahre Values (17,'Yayoi verlaesst die Sternenwarte',201);
    

    Würde der Trigger Funktionieren müsste ich nicht

    Insert Into T_Koenigin_der_1000_Jahre Values (17,'Yayoi verlaesst die Sternenwarte',201);
    

    Schreiben sonder nur

    Insert Into T_Koenigin_der_1000_Jahre Values (0,'Yayoi verlaesst die Sternenwarte',201);
    

    Wenn der inhalt null ist und ich einen Neuen datensatz dazu nehme nimmt er die Zahl die im generator G_Koenign.. steht und addiert eins dazu und so weiter..

    Das sollte ersmtl nur eine Test Datenbak seit damit ich per C++ Die Benutzeroberfläche Programmieren kann ..

    Das ist nur um Arbeit zu ersparen wenn man mit Kundendaten arbeitet uns sich z.B 10000 Kunden anmelden... bei den Folgen wollte ich das nur so machen .. hab das aber dann doch weggelassen.

    Also bei interbase ist das so komischer weise bei MySQl muss ich auto inc oder so neben Folge schreiben .... aber damit setz ich mich noch auseinander

    Die Richtige Datenbank bekommoch mehr Tabellen

    mfg Seby



  • Soooo.

    Ich hab mir das XAMMP Geladen und mein erster eindruck ist .... 👍 Super Spitze

    Das Programm ist leicht zu benutzen und da ist alls drauf SQL PHP Admin und Apatch echt geil.

    Ich habe meine Datenbank nun dort eingegeben..

    Mein problem ist nun wie kann ich eine oberfläche mit C++ machen ...

    Ich such weiter in der Hilfe und Probier rum aber es wäre coll wenn mir jemand sagen kann ob das überhaupt möglich ist.

    mfg Seby



  • Bezüglich deines Generators. Sollte das

    NEW.nr = GEN_ID(T_Koenigin_der_1000_Jahre, 1);
    

    nicht so aussehen

    NEW.nr = GEN_ID(G_Koenigin_der_1000_Jahre, 1);
    

    Wenn du den BCB verwendest hilft vielleicht diese Seite
    http://www.fachinformatiker-ihk.de/download/extras/CSIBXCB_.pdf



  • SET TERM ^ ;

    CREATE TRIGGER Set_nr FOR T_Koenigin_der_1000_Jahre
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
    if (NEW.nr is Null) then
    NEW.nr = GEN_ID(T_Koenigin_der_1000_Jahre, 1);
    END
    ^

    COMMIT WORK ^
    SET TERM ;^

    Das hab ich ja gemacht funktioniert aber igend wie nicht .. na ja egal ich kann auch ohne arbeiten .....

    ich versuch erstmla das mit MYSQL zu lösen ich hoffe das geht besser

    mfg Seby



  • Schau nochmal genau hin. gen_id verlangt doch den Namen des Generators und der fängt bei dir mit G und nicht mit T an.



  • och braunstein, wie gemein!!! Ich war auch gerade darauf gekommen...


Anmelden zum Antworten