AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ClientDataSet; Datenmenge wird ungewollt zur aktuellen hinzugefügt, warum?
Thema durchsuchen
Ansicht
Themen-Optionen

ClientDataSet; Datenmenge wird ungewollt zur aktuellen hinzugefügt, warum?

Ein Thema von FragenderHerbert · begonnen am 28. Jun 2014 · letzter Beitrag vom 2. Jul 2014
 
FragenderHerbert

Registriert seit: 4. Dez 2013
47 Beiträge
 
#3

AW: ClientDataSet; Datenmenge wird ungewollt zur aktuellen hinzugefügt, warum?

  Alt 28. Jun 2014, 12:56
Du solltest erstmal bedenken, daß der Parameter "Field" nicht immer ein Feld enthalten muß und auch mal nil sein kann.
Ok, das könnte die Ursache meiner Exception sein. Ich habe stillschweigend vorausgesetzt, das der Event-Handler zwingend einen Feldinhalt übergibt und deshalb dort nicht gesucht.

  • erstmal sagt dir die Exception-Message, welche du uns vorenthälst, ganz bestimmt was von "Zugriffsverletzung bei Adresse $000000xx" und schon weiß man, daß da irgendwo ein NIL im Spiel ist
  • und wenn man den Debugger verwenden würde, dann würde man auch sehen, daß dieses Property bestimmt NIL sein wird
Und genau da ist das Problem! Wo ist irgendwo, wo ja der Nil Zeiger sein müsste?
Noch mal: Ich habe gar nicht mit irgendeinem NIL Zeiger gerechnet, da ich eine EDataBaseError Exception erhalten habe. Kann ja sein, das mein Konzept im Grundsatz schon falsch ist. Aber wie kann ich es dann besser machen. Eine Client-Server Architektur will ich absichtlich nicht, da ich mich noch nicht mal mit den elementarsten Grundlagen auskenne und auch die Delphi-Treff Tut-s hier nicht viel her geben.

Eine andere für mich hoch interessante Frage ist für mich im Gesamtzusammenhang: Wo finde ich ein einsteigerfreundliches Lehrbuch zu SQL Syntax. Möglichst MSSQL, da ich mich an CS Arcitekturen noch nicht heran traue und meine Medienverwaltung ausschließlich auf einem meiner lokalen Computer laufen soll, möglichst portabel auf einem USB Stick. Die Medienverwaltung soll deshalb keine vorinstallierten Datenbankserver voraussetzen. Leider kriege ich bei ADO den Verbindungsstring nicht "gebacken", ich erhalte dann Fehlermeldung, das die Tabelle nicht vorhanden ist. Ich habe da als Treiber den:

- OLE DB Simple Provider sowie den
- OLE DB Provider für Microsoft Directory Services

getestet.

Bei beiden kommt die Fehlermeldung "Tabelle nicht vorhanden"

Bei letzterem muss ich u.a. Datenquelle und Speicherort separat angeben.

Datenquelle -> meine Datenbankdatei
Speicherort -> mein Datenbankverzeichnis

Die Adresse 127.0.0.1 wird als Speicherort nicht akzeptiert. Daher habe ich "http://localhost" gar nicht erst probiert.

Ich will eine lokale Datenbank haben, da die für meine Zwecke komplett ausreicht und ich mir deshalb die Einarbeitung in CS Architekturen noch sparen möchte. Weil ich aber eine portable Anwendung will, scheidet BDE sofort aus. Bei Interbase bräuchte ich eine portable Version des Servers. Das hätte aber dann wohl zur Folge, das ich um die Erlernung der CS Architektur nicht herum käme.

Debuggen kann ich erst effektiv, wenn ich weiß, wo ich den Fehler suchen muss. Wenn ich den Fehlerort nicht eingrenzen kann, bin ich mit dem Test anderer DB Kompos genau so schnell oder gar schneller am Ziel.

Zitat:
Aber warum verwendest du nicht die Master-Detail-Funktionen des ClientDataSets, und lässt das automatisch synchronisieren?
  • IndexFieldNames
  • MasterFields
  • MasterSource
Doch, das habe ich schon erledigt. Alles im Objektinspector. Per Quelltext mache ich das zur Übung später, wenn ich das per OI geschafft habe.

Zitat:
Sicher, daß du Locate richtig verwendest, oder täuscht das nur und du hast eine etwas "eigenartige" Tabellenstruktur? (welche natprlich auch geheim ist)
  • ID als Feldname
Nein, bin ich nicht. Habe soeben das hier dazu gefunden:
http://www.delphipages.com/forum/showthread.php?t=41929

Da gibt es u.a. diesen Beitrag im Forum:

Zitat:
Change the comma to a semicolon in the Field string.
Example:

Locate('FIELD1;FIELD2;FIELD3',VarArrayOf([Value1,Value2,Value3]),[]);

Happy New Year
Christian
Allerdings brauche ich das variabel, das heißt -> Value1 muss der aktuelle Wert aus der Mastertabelle sein (CD0001,CD0002,DVD0001,USB-Stick0003,...)

Wenn aber der Parameter Field im Eventhandler der DataSource auch NIL sein kann?
Habe inzwischen den Quellcode schon in einen try except Block eingeschlossen. Aber mein EDatabaseError wird vor dem eingentlichen Start schon geworfen. Ich will aber, das in diesem Fall eben nix passiert. Wie aber stelle ich das an. Sorry, aber ich bin in Sachen Datenbank ein totales Greenhorn.

Bei dieser Gelegenheit frag ich gleich mal, wo gibt es denn wirklich einsteigerfreundliche Literatur zu Datenbanken? Ich habe außerdem Xampp auf meinem System installiert. Der beherrscht auch MySQL. Aber wo gibt es einsteigerfreundliche Tuts dazu?
  Mit Zitat antworten Zitat
 


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 19:07 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