![]() |
Paradox 7 und TCursor
Hallo Leute
Noch bin ich neu aber ich denke mal das ich auch schlauer werden kann. Nun ich habe da ein Problem welches mich schon mindestens seit einem Jahr ärgert und quält. Ich habe Zwei Paradox Tabellen welche ich mittels Tcursor ansteuern will, aber ich bekomme das nicht hin das mein Tcursor auf den richtigen Datensatz springt. z.B. soll der Tcursor auf dem Datensatz springen welcher zwei Criterien erfüllt egal an welcher Position sich der Datensatz befindet. tcVar.open("lager.db") tcVar.locate("Lag.Nr", Lag_Nr.Value)("Auftr.Nr", Auftr_Nr.Value) Ich bekomme es einfach nicht hin da der Tcursor immer nur nach der Lagernummer nicht aber nach Lagernummer und Auftragsnummer sucht. Hat er die Lagernummer gefunden Plaziert er sich richtig, ansonsten nimmt er immer den ersten Datensatz in der Tabelle. Was mache ich falsch ? Kann mir jemand helfen wie ich diese oder eine andere locate Anweisung schreiben muß damit der Tcursor sich erst dann plaziert wenn beide Criterien erfüllt sind. währe über eine hielfe sehr Dankbar da ich mit diesem Problem schon sehr lange am kämpfen bin. :( |
Hallo Kuddel,
zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum. Zu deinem Problem: sehe ich das richtig, dass du mit ObjectPAL arbeitest und die Ansteuerung direkt in Paradox machen willst? Oder möchtest du gerne das Delphi-Gegenstück zu den ObjectPAL Anweisung? |
Hallo MrSpock
eigentlich ist es mir egal mit welchem teil ich es Hinbekomme. Ich bin wie gesagt neu auf diesem Sektor und bin natürlich mit ObjectPal und direkt mit Paradox am Arbeiten. Da ich für Delphi 6 welches ich besitze keinerlei Handbücher oder Vorlagen habe war ich weiter mit Paradox am Arbeiten. Also wenns geht bitte mit Paradox und ObjectPal helfen. |
Hallo Kuddel,
bei Delphi 6 benötigst du mindestens die Professional Version, weil erst die Datenbankunterstützung bietet. Dann nimmst du eine TTable Komponente, die mit der Tabelle Lager.db verbunden wird. Sind Lag_Nr und Auft_Nr der zusammengestzte Primärschlüssel, so positionierst du den aktuellen Datensatz mit:
Delphi-Quellcode:
oder, falls es kein Schlüsselfeld ist:
if tblLager.FindKey([lagNr, auftNr]) then
{ Datensatz existiert und ist ausgewählt } else { Datensatz existiert nicht };
Delphi-Quellcode:
if tblLager.Locate('Lag_Nr;Auftr_Nr', VarArrayOf([lagNr, auftrNr]), []) then
{ Datensatz existiert und ist ausgewählt } else { Datensatz existiert nicht. }; |
Vielen Dank für diese Hilfe , aber leider ist es ein code den ich nicht nutzen kann , da ich nur eine Delphi version habe die ich von Borland runterladen konnte.
Da ich meine gesammte Datenbank in Paradox erstellt habe und mittels Formulare auf die einzelnen Tabelle zugreife bräuchte ich hilfe wie ich dem TCursor erklären kann das er nach Auftrags und Lagernummer suchen soll bevor er sich auf einen Datensatz bewegt, da ich mehrere gleiche Lagernummern habe jedoch verschiedene Auftragsnummern. Bislang kann ich immer nur nach einem wert suchen das führt aber dazu das ich Material von einem falschem Auftrag buche da sich der Tcursor immer auf dem ersten Datensatz bewegt welcher die Auftrags oder Lagernummer hat nicht aber Auftrags- und Lagernummer. |
Hallo Kuddel,
also gut, dann machen wir das mal in ObjectPal :mrgreen: : Dein Code enthält hier einen Fehler in der Notation, es muss heißen:
Delphi-Quellcode:
unter der Annahme, dass deine Felder in der Tabelle tatsächlich Lag.Nr und Auftr.Nr heißen. Enthalten die Feldnamen wirklich einen Punkt?
tcVar.open("lager.db")
tcVar.locate("Lag.Nr", Lag_Nr.Value, "Auftr.Nr", Auftr_Nr.Value) Was für einen Typ haben Lag_Nr und Auftr_Nr? |
Hallo MrSpock
Auftr.Nr und Lag.Nr sind beides Typen der Kategorie Number und auch die Feldnamen enthalten wirklich den Punkt. Das war das erste was ich versucht habe um nach diesen beiden Nummern zu suchen , jedoch habe ich es wie gesagt nicht geschaft beide Nummern zu suchen. Wie vorher gesagt kann ich über ein Formular Rücklieferung Material dem Lager gut schreiben da ich nur die Lag.Nr brauche. Da es sich aber um unsere eigenen Baustellen handelt wo das Material hingeht wollte ich das Material auch aus der Ausgangs DB. rausschreiben. Folglich habe ich eine Auftragsnummer eingebunden welche mir ermöglichen soll auf die einzelnen Auslieferungen zurück zu greifen. sprich Ich versuche so für mich als Disponent eine möglichkeit zu erstellen um mit dem Programm welches mir in der Firma wie Privat zu verfügung steht den Ablauf zu erleichtern un besser nach halten zu können welches Material wo rausgegangen ist und welches wann von welcher Baustelle zurück gekommen ist. Folglich kann ich auch nachvollziehen welches Material noch auf welcher Baustelle befinden muß. |
Hallo Kuddel,
wenn du sagst, der Code, den ich oben gepostet habe, funktioniert nicht, werde ich mir das am Wochenende noch einmal genauer anschauen. |
Hallo MrSpock
Ich glaube ich habe versucht das Pferd von hinten aufzu zäumen , also hier in kürze was ich eigentlich will. Ich habe mehrere Tabellen darunter Lager , Ausgang und Rücklieferung also was ich im Ausgang schreibe wird aus dem Lager abgezogen soweit richtig schlüssel ist hier die Lager nummer. Was ich in der Rücklieferung schreibe sollte aus dem Ausgang abgezogen werden (" solte über Auftragsnummer und Lagernummer ") gefunden werden und gleichzeitig dem Lager über der Lagernummer wieder gut geschrieben werden also als "Eingang" funktioniert nicht. |
Hallo Kuddel,
ich hab das jetzt noch einmal ausprobiert. Dazu habe ich eine Tabelle "lager.db" erstellt, die beide Felder, nach denen du suchen willst enthält, plus ein paar Zusatzfelder. Dann habe ich ein Formular erstellt, mit 2 Editfeldern (für die Suchwerte) und einem Schalter "Suchen". Der pushButton Methode habe ich folgenden Code zugewiesen:
Delphi-Quellcode:
Tja, was soll ich sagen!? Funktioniert einwandfrei, auch mit anderen Feldern im Locate.
method pushButton(var eventInfo Event)
var tc Tcursor tv TableView endvar tv.open("lager.db") tc.attach(tv) if tc.locate("Lag.Nr", SuchLager.Value, "Anzahl", SuchAuftrag.Value) then tv.moveToRecord(tc) else msgInfo("Fehler", "Nicht gefunden") endif endMethod Welchen Typ haben deine Felder? (sind die beiden Suchfelder Integer Felder?) |
Hallo MrSpock
entweder bin ich zu dumm oder ich hab es einfach nicht kappiert. Also beide Such Felder sind vom Typ Number. Und wenn ich deinen Code eingebe bekomme ich immer bei SuchLager.Value die Fehlermeldung Unbekannter Bezeichner. wenn ich das Such weglasse und nur auf Lag_Nr.Value und Auftrag_NR.Value gehe bekomme ich immer die Meldung Fehler nict gefunden. i´m stupid I don´t now thanks |
Hallo Kuddel,
Zitat:
Zitat:
|
Also irgendwie bekomm ich das nicht hin.
Nun habe ich eine neue Tabelle erstellt mit den zusatz Feldern und ein neues Formular. Aber ich bekomm einfach nicht den wert den ich erwarte. Ich wollte doch nur eine Lager Tabelle mit eingang und Ausgang und das ganze über ein Formular steuern , damit ich mein Material auch wieder zurückschreiben kann ohne immer in der Tabelle den Datensatz zu suchen und zu ändern. |
Hallo Kuddel,
wenn du willst, kannst du mir die Tabelle und das Formular ja mal zuschicken oder an deinem nächsten Posting anhängen, dann könnte ich mir das mal genauer anschauen. |
Hallo Kuddel,
ich habe mir dein Paket einmal angeschaut. Zunächst musste ich das Feld Bezeichner wieder zum Schlüsselfeld machen, weil sich sonst das Formular "Rücklieferung" nicht öffnen lässt. Du hast nämlich in diesem Formular im Datenmodell die Tabelle Rücklieferung.db mit der Tabelle Lager.db verknüpft. Mir ist aber jetzt dein Problem nicht klar geworden. Wenn die Anzahl des zurückgelieferten Lagerartikels geändert wird, führst du die entsprechende Änderung an der Lagertabelle durch. Das funktioniert ja. Du schreibst aber oben, du möchtest in der Lagertabelle nach zwei Feldern suchen, Lagernummer und Auftragnummer. Die Lagertabelle hat aber kein Feld "Auftragnummer" !? Hast du die Tabelle mitlerweile geändert? Oder verstehe ich hier etwas falsch? |
Hallo MrSpock
Nachdem ich versucht habe alles neu zu schreiben habe ich vergessen dir zu sagen das der Teil der auf die Lager.DB zugreift funktioniert. Aber was ich wollte ist das ich mit einer Rücklieferung auch gleich die Tabelle Ausgang.DB zu bearbeiten. Hier ist es so das ich die Felder Auftragsnummer und Lagernummer Habe. Nur das was im Lager gut geschrieben werden soll wird über die Lagernummer lokalisiert aber es muß auch aus der Ausgang.DB abgezogen werden und dafür brauche ich die Auftrags und Lagernummer, da mehrere Baustellen das selbe Material anfordern aber nur von einigen Baustellen das Material zurück kommt. Will sagen wen Walsum mit der Auftragsnummer 5 10 Masken bestellt hat und Voerde mit der Auftragsnummer 6 ebenfalls 10 Masken bestellt hat dann habe ich das Problem das ich nicht unterscheiden kann welche Baustelle die Masken zurück geliefert hat. deshalb brauche ich die Auftragsnummer welche auf die Ausgangs.de zugreift und das Material anhand der Auftragsnummer abzieht und dem Lager anhand der Lagernummer zu Addiert. Also aus dem Ausgang(Substrahieren) und im Lager (Addieren). Was ich vergessen hab zu erwähnen ist das im Rücklieferungs Formular auf Lagernummer der code liegt für die Ausgangs.db Kuddel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 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