AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Insert/MS Access

Ein Thema von Anfänger2013 · begonnen am 14. Apr 2013 · letzter Beitrag vom 16. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Insert/MS Access

  Alt 15. Apr 2013, 04:10
Datentypen in Kriterienausdruck unvertraglich
Also deutlicher kann eine Fehlermeldung wohl nicht mehr ausfallen. Du mußt jetzt einfach überprüfen, ob alle Daten, die du an Access schickst, den richtigen Datentypen entsprechen. Oder worauf sonst sollte diese Fehlermeldung wohl hinweisen? Zeig doch mal deine Tabellendefinition.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:46
Du hast hier mehr als nur einen Fehler drin ...

Delphi-Quellcode:
with ADOQuery_Buchen3 do
  begin
    // Wenn ADOQuery_Buchen3 jetzt aber noch geöffnet ist ... ?
    SQL.Text:=
      ( // Wozu die Klammer?
        'INSERT INTO Buchung (Pass_Nr, Zimmer_Nr, Anreise, Abreise) ' +
        'Values (' +
        '"bu_e_passnummer.Text", ' +
        '"strtoint(bu_e_zimmernummer.Text)", ' +
        '"anreise", ' +
        '"abreise"' +
        ');
      );
    ExecSQL;
    Active:= True; // Wieso soll diese Abfrage (INSERT) wieder geöffnet werden?
  end;
  1. Du weist der ADOQuery_Buchen3 einfach etwas zu, obwohl die geöffnet sein kann -> vorher schließen
  2. Du schreibst direkt in das SQL-Skript (wird in der/durch die Database-Engine ausgeführt) Bezüge aus deinem Programm (bu_e_passnummer.Text , bu_e_zimmernummer.Text ) bzw. benutzt dort Delphi-Funktionen (strtoint ).
    Dies/e sind aber der Database-Engine (MS-Access) gänzlich unbekannt
  3. Nach dem Ausführen des SQl-Skripts (INSERT -> verändert Daten aber liefert keine Daten zurück) setzt du das auf aktiv, aber was soll das bezwecken? Da kann nichts zurückkommen, ausser dass der INSERT hier nochmals ausgeführt wird

Jetzt mal ein Schuss ins Blaue:

Ich vermute, dass in ADOQuery_Buchen3 eine Abfrage enthalten ist, die du (evtl. in einem Grid) anzeigst. Aus unerfindlichen Spargründen versuchst du Komponenten einzusparen und für unterschiedliche Zwecke zu gebrauchen.

Jetzt ein Lösungsvorschlag:

Erstelle dir für jede dieser Datenveränderungs-Aufgaben eine Methode (in einem TDataModule)/eine Prozedur und rufe dann diese Methode/Prozedur auf. Für das oben genannte Beispiel würde dass dann wie folgt aussehen:
Delphi-Quellcode:
procedure AddBuchung( AConnection : TADOConnection; const Pass_Nr : string; Zimmer_Nr : Integer; Anreise, Abreise : TDateTime );
var
  LQry : TADOQuery;
begin
  LQry := TADOQuery.Create( nil );
  try
    LQry.Connection := AConnection;

    LQry.SQL.Add( 'INSERT INTO Buchung (Pass_Nr, Zimmer_Nr, Anreise, Abreise)' );
    LQry.SQL.Add( 'VALUES ( :Pass_Nr, :Zimmer_Nr, :Anreise, :Abreise )' );

    LQry.ParamByName( 'Pass_Nr' ).Value := Pass_Nr;
    LQry.ParamByName( 'Zimmer_Nr' ).Value := Zimmer_Nr;
    LQry.ParamByName( 'Anreise' ).Value := Anreise;
    LQry.ParamByName( 'Abreise' ).Value := Abreise;

    LQry.ExecSQL;
  finally
    LQry.Free;
  end;
end;
Aufrufen kannst du das nun mit
Delphi-Quellcode:
AddBuchung( ADOConnection1, bu_e_passnummer.Text, StrToInt( bu_e_zimmernummer.Text ), Anreise, Abreise );
// Jetzt noch den Refresh/Requery auf das DataSet, womit die Buchungsdaten angezeigt werden
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:52
Und zur Not läßt man sich den SQL-Text einfach mal anzeigen – entweder mit einem ShowMessage oder einem SaveToFile für weitere Verwendung. Meist sieht man spätestens dann, was man mal wieder für einen Murks zusammengepfuscht hat
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:54
Und zur Not läßt man sich den SQL-Text einfach mal anzeigen – entweder mit einem ShowMessage oder einem SaveToFile für weitere Verwendung. Meist sieht man spätestens dann, was man mal wieder für einen Murks zusammengepfuscht hat
... und wenn man es nicht sieht, dann führt man den einfach mal direkt im Datenbank-System aus und lässt sich dort die Fehler um die Ohren hauen ... um zu merken, dass ist kein Delphi-Fehler, sondern mein Murks
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:56
Ist aber in diesem speziellen Fall nicht wirklich möglich, da der TE mit Delphi-Variablen arbeitet bzw. zu arbeiten versucht – und die kann Access beim besten Willen nicht kennen ...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:58
Ist aber in diesem speziellen Fall nicht wirklich möglich, da der TE mit Delphi-Variablen arbeitet bzw. zu arbeiten versucht – und die kann Access beim besten Willen nicht kennen ...
Aber wenn man das nicht erkennt
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Insert/MS Access

  Alt 15. Apr 2013, 06:04
... dann sollte man sich erst einmal mit SQL und Datenbank-Grundlagen befassen. Irgendwie find ich's immer etwas peinlich, wenn einfachste Fehlermeldungen nicht verstanden werden. Da frag ich mich dann manchmal, ob derjenige sich nicht besser ein anderes Hobby zulegen sollte als ausgerechnet Software-Entwicklung ... Oft wird ja nicht mal die Fehlermeldung genannt, sondern einfach nur "hilfe ich hab eine Fehlermeldung, was soll ich machen!" geschrien
  Mit Zitat antworten Zitat
Anfänger2013

Registriert seit: 8. Apr 2013
11 Beiträge
 
#8

AW: Insert/MS Access

  Alt 15. Apr 2013, 15:47
Zitat:
Delphi-Quellcode:
procedure AddBuchung( AConnection : TADOConnection; const Pass_Nr : string; Zimmer_Nr : Integer; Anreise, Abreise : TDateTime );
var
   LQry : TADOQuery;
begin
   LQry := TADOQuery.Create( nil );
   try
     LQry.Connection := AConnection;

     LQry.SQL.Add( 'INSERT INTO Buchung (Pass_Nr, Zimmer_Nr, Anreise, Abreise)' );
     LQry.SQL.Add( 'VALUES ( :Pass_Nr, :Zimmer_Nr, :Anreise, :Abreise )' );

     LQry.ParamByName( 'Pass_Nr' ).Value := Pass_Nr;
     LQry.ParamByName( 'Zimmer_Nr' ).Value := Zimmer_Nr;
     LQry.ParamByName( 'Anreise' ).Value := Anreise;
     LQry.ParamByName( 'Abreise' ).Value := Abreise;

     LQry.ExecSQL;
   finally
     LQry.Free;
   end;
end;
cool ..funktioniert echt super, danke ...wo ich das mit den Parametern gemacht hatte hatte ich dummerweise statt "Pass_Nr" wieder in "Pass_Nr.Text" geändert, da der mir ne Fehlermeldung brachte. Ne neue Procedur zu schreiben ist natürlich nicht schlecht, da man sich einiges erleichtern kann. Man muss aber auch erstmal wissen wie man sowas für das eigene Beispiel macht. Das mit dem Modul war mir z.b. komplet neu.

Zitat:
... dann sollte man sich erst einmal mit SQL und Datenbank-Grundlagen befassen. Irgendwie find ich's immer etwas peinlich, wenn einfachste Fehlermeldungen nicht verstanden werden. Da frag ich mich dann manchmal, ob derjenige sich nicht besser ein anderes Hobby zulegen sollte als ausgerechnet Software-Entwicklung ... Oft wird ja nicht mal die Fehlermeldung genannt, sondern einfach nur "hilfe ich hab eine Fehlermeldung, was soll ich machen!" geschrien
klar, mir gefällt es auch nicht wirklich jetze jemanden mit meinen Problemen zu nerven, dafür sind aber auch i.wo diese Foren da. Was ich hier auch in den letzen Tagen gepostet hatte ist "Neuland" für mich. Und Delphi-Programmierung gehört nunmal zum Lerplan. Das was wir in der Schule machen reicht nicht mal ansatsweise an das hier ran und wir haben auch keine Zeit uns näher mit der Programmierung auseinander zu setzen. Oftmals bekommen wir - wie jetz, nach 2 Jahren keiner Programmierung- ein Programm ausgesetzt und dann viel Spaß beim Programmieren. Ein 2. Kurs bei mir hat nen Lehrer der so hilfreich wie ein Deutschlehrer ist. Probleme die über das Lösungsheft hinaus gehen bleiben für immer ungelöst. Naja ...wenn man es nicht, wie ihr, täglich macht, dann kann man auch nicht mit vielen Fachbegriffen oder Fehlermeldungen anfangen.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: Insert/MS Access

  Alt 15. Apr 2013, 16:03
klar, mir gefällt es auch nicht wirklich jetze jemanden mit meinen Problemen zu nerven, dafür sind aber auch i.wo diese Foren da.
Dir konnte im Grunde nur mit fertigem Quellcode geholfen werden. Mir mißfällt das, weil du damit eine Notenbewertung erzielst, die auf Leistungen anderer beruht, und das wahrscheinlich ohne den kopierten Code wirklich verstanden zu haben. Bei vielen Schülern, die hier und in den beiden anderen Delphi-Foren posten, ist es dann zumeist noch besonders dringend, ihnen so schnell wie nur möglich einen funktionierenden Quellcode bereitzustellen (Hilfe, dringend, muß am Montag abgeben usw.). Ich finde, die Delphi-Foren sind nicht dafür da, Schülern die Hausaufgaben zu erledigen.

Was ich hier auch in den letzen Tagen gepostet hatte ist "Neuland" für mich. Und Delphi-Programmierung gehört nunmal zum Lerplan. Das was wir in der Schule machen reicht nicht mal ansatsweise an das hier ran und wir haben auch keine Zeit uns näher mit der Programmierung auseinander zu setzen. Oftmals bekommen wir - wie jetz, nach 2 Jahren keiner Programmierung- ein Programm ausgesetzt und dann viel Spaß beim Programmieren. Ein 2. Kurs bei mir hat nen Lehrer der so hilfreich wie ein Deutschlehrer ist. Probleme die über das Lösungsheft hinaus gehen bleiben für immer ungelöst.
Irgendwie schon seltsam: Da lernt ihr die Grundlagen der Programmierung zu dem Zweck, sie selbständig weiter auszubauen, aber es verstreichen zwei Jahre ohne weitere Übung an Projekten. Und wenn ihr dann wieder damit konfrontiert werdet, steht ihr da wie der Ochse vor dem geschlossenen Scheunentor.

Naja ...wenn man es nicht, wie ihr, täglich macht, dann kann man auch nicht mit vielen Fachbegriffen oder Fehlermeldungen anfangen.
Wärst du in den vergangenen zwei Jahren, die ohne Programmierunterricht verstrichen sind, an der Programmierung drangeblieben, und sei es auch nur eine Stunde täglich, dann könntest du heute selbständig erkennen, was die Fehlermeldung "Datentypen in Kriterienausdruck unverträglich" tatsächlich bedeutet. Wer kein Interesse an der Programmierung hat, der sollte auch keinen entsprechenden Kurs belegen.
  Mit Zitat antworten Zitat
Anfänger2013

Registriert seit: 8. Apr 2013
11 Beiträge
 
#10

AW: Insert/MS Access

  Alt 15. Apr 2013, 16:21
Zitat:
Wärst du in den vergangenen zwei Jahren, die ohne Programmierunterricht verstrichen sind, an der Programmierung drangeblieben, und sei es auch nur eine Stunde täglich, dann könntest du heute selbständig erkennen, was die Fehlermeldung "Datentypen in Kriterienausdruck unverträglich" tatsächlich bedeutet. Wer kein Interesse an der Programmierung hat, der sollte auch keinen entsprechenden Kurs belegen.
Klar, da haste auch recht. Es liegt meistens eh an den Schülern, da die nichts machen ( bei dir war es bestimmt auch nicht anderes, auf anderen Gebieten). Man muss ja auch eine Begeisterung für sowas entwickeln. Klar würde ich gerne JavaScript, C und ähnliches programmieren können, aber das Durchsetzungsvermögen muss man auch erstmal haben, da es ein riesen Umfang an sachen hat und man die ganzen Befehle erstmal lernen muss. Und Programmierung und der Schule bei mir ist nur ein kleiner teil. Allein bei Datenbanken haben wer meist nur mit Access gearbeitet und Delphi mit Datenbanken, mal rauslesen und sowas einfachens halt. Der Unterricht umfast ja auch Hardware, Softwareentwicklung usw. Das mit der Note würde ich, in meinem Fall, nicht zustimmen können. Das was ihr mir gepostet hatten hatte ich nur teils oder garnicht übernommen und mein Programm danach ausgerichtet. Das einzigste was ich vollständig übernommen hatte, war der vorherige Insert-Befehl und mein Quellcode umfasst momentan ca 1100 Zeilen.

Geändert von Anfänger2013 (15. Apr 2013 um 16:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz