Probleme mit Delphi und ADO

Diskutiere Probleme mit Delphi und ADO im Developer Network Forum im Bereich Hardware & Software Forum; Hi, kann mir jemand bei folgenden 2 Problemen helfen. 1. Habe unter Delphi ein Formular und greife über die ADO-Komponenten auf eine Tabelle...
  • Probleme mit Delphi und ADO Beitrag #1
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Hi,
kann mir jemand bei folgenden 2 Problemen helfen.

1. Habe unter Delphi ein Formular und greife über die ADO-Komponenten auf eine Tabelle Sybase DB zu. Klappt auch alles super.
In der Datenbank werden in einem Before-Update-Trigger bestimmte Felder dieser Tabelle entsprechend berechnet. Die berechneten Felder werden aber nicht in der Datenmenge unter Delphi aktualisiert. Auch nicht nach einem Refresh. Ein Requery möchte ich nicht machen, kann später zulange dauern.

2. Habe in einem Formular das TDBGrid benutzt und Daten aus einer Tabelle anzeigt. Eine Spalte möchte ich allerdings als Lookup aus einer anderen Tabelle anzeigen. Genauer : Die Spalte in der Tabelle ist eine Referenz auf ein Datensatz in einer anderen Tabelle deren Spalte ich anzeigen möchte.
Dabei möchte ich die Lösung über SELECT x1, x2, ( SELECT info FROM T2 WHERE id=x3) FROM T1 nicht einsetzen.


...yks ;)
 
  • Probleme mit Delphi und ADO Beitrag #2
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
zu 1.: Du kommst nicht um ein Requery rum. Sorry. Aber Du kannst tricksen, indem Du statt einer ADO-Table eine RequestLive-Query nimmst, die braucht nur etwa ein Drittel der Zeit beim Datenübertragen. Dumm ist jetzt nur, daß RequestLive (zumindest bei D5 Enterprise) nicht ausprogrammiert ist, mußt Du also selbst machen.

zu 2.: Ich habe es unter SQL/ADO noch nicht probiert, Lookups (properties LookupDataSet + LookupKeyFields) in den TFields zu benutzen. Bei der BDE machte ich das öfters, bei ADO bevorzugen wir hier jetzt das Öffnen eines Lookup-Forms.

O Love
 
  • Probleme mit Delphi und ADO Beitrag #3
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Re: RequestLive

Ich habe mich geirrt, das ist schon automatisch drin. Allerdings gibt es bei einer ADO-Query die Property nicht. Wenn Du
Code:
function GetCanModify: Boolean; override;

function TADOPublicQuery.GetCanModify: Boolean;
begin
  Result	:= inherited GetCanModify and FRequestLive;
end;
so überschreibst, könntest Du nach außen verhindern, daß der Nutzer jede mögliche ADO-Query editieren kann.

O Love
 
  • Probleme mit Delphi und ADO Beitrag #4
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Hi,

danke für deine Antwort.
Bin nun wie folgt weitergekommen. Habe den CursorTypen auf Keyset und CursorLocation auf UseServer. Im ADODataSet habe ich im AfterPost dann [B ADODataSet1.Refresh[/B] aufgerufen.
Klappt einwandfrei.

Zu2: Wie funktioniert das denn mit den Lookup... in den TFields. Gibt es Doku dazu ?
Ich habe versucht das DBGridPanel(hiess es so?) zu nutzen und dann eine DBLookupCombo drauf zu legen, aber ätsch, macht Delphi nicht mit. Irgendwie logisch wenn man überlegt wie das mit einer Komponente pro Zeile laufen soll. ( Access kann es auch nicht).

...yks ;)
 
  • Probleme mit Delphi und ADO Beitrag #5
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
zu 2.: Ich schildere es mal an einem Beispiel, hoffentlich reden wir vom selben Zweck:

Du hast 2 Tabellen, Artikel (ArtikelNr + Bezeichnung) und Auftragspositionen (... + ArtikelNr). Nun willst Du in den Auftragspositionen zusätzlich zur ArtikelNr noch die richtige Bezeichnung anzeigen.

Gehe dazu in den Feldeditor der Auftragspositionen und füge ein neues Feld hinzu. Es erscheint ein Assistent. Als Name vergibst Du meinetwegen "POSBEZ", als Typ "String", als Größe "50". Dann stellst Du "(o) Lookup" ein, damit werden unten ein paar Controls freigeschaltet.

Jetzt bei Datenmenge (LookupDataSet) die Artikel-Tabelle eintragen, bei Schlüsselfelder (KeyFields) die ArtikelNr der Position, bei Schlüssel (LookupKeyFields) die ArtikelNr der Artikel-Tabelle und bei Ergebnisfeld (LookupResultField) die Bezeichnung aus der Artikel-Tabelle.

Damit hast Du ein TField angelegt, welches ein Lookup auf eine andere Tabelle ist. Die oben in Klammern geschriebenen Properties sind dann die, die Du im Objekt-Inspektor siehst.

O Love
 
  • Probleme mit Delphi und ADO Beitrag #6
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Hi,

@O Love : Reden vom selben!
Hab deine Ausführung verstanden und werde es ausprobieren. Hört sich einfach und gut an.
Danke, melde mich wieder am Montag.


...yks ;)
 
  • Probleme mit Delphi und ADO Beitrag #7
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Es ist relativ einfach. Allerdings solltest Du die Geschwindigkeit nicht aus dem Auge verlieren. Er muß ja für jeden Eintrag in der LookupDataSet nachschauen. Ich weiß allerdings nicht, ob er das präventiv für alle macht oder nur für die VisibleRows.

Falls es zu langsam wird, solltest Du über die von uns hier praktizierte Lösung nachdenken, ein LookupForm zu programmieren. Ein Klick auf 'ne Ellipse, dann kommt die LookupDataSet hoch, wo der aktuelle Wert lokalisiert wird.

O Love
 
  • Probleme mit Delphi und ADO Beitrag #8
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Moin

@O Love: Sag mal, für welche Delphi Version gilt deine Beschreibung. In der 5'er Ent. gibt es das ganze nicht. Die 6'er Ent. bekomme ich in den nächsten Tagen erst auf den Tisch.
Die Properties die du beschrieben hast, finde ich in "TField" aber mit Feldeditor und Anzeige der Eigenschaften im Objektinspektor is nicht.

...yks ;)
 
  • Probleme mit Delphi und ADO Beitrag #9
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Ich hab' hier auch "nur" D5 Enterprise, es ist also drin.

Den Feldeditor bekommst Du ja, wenn Du doppelt auf eine TDataSet klickst. Dort hast Du im Kontext-Menü 3 Einträge: Felder hinzufügen, Neues Feld und Alle Felder hinzufügen. Der beschriebene Assistent erscheint bei Neues Feld.

Ansonsten bekommst Du die Properties, wenn Du bereits ein TField hinzugefügt hast und dann dessen Eigenschaften im Objekt-Inspektor betrachtest.

O Love
 
  • Probleme mit Delphi und ADO Beitrag #10
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Hi,

jo danke, habe es jetzt gefunden. Wer denkt auch immer an das Kontextmenu.
Allerdings werde ich nun die 6'er abwarten und schauen ob ich mit den ADO-Komponenten da auch noch teilweise mein leid habe. Wenn ja, werde ich wohl auf die BDE zurückgreifen müssen.
Warum macht dieses ADO kein "Append", sondern läßt nur einen "Insert" zu. Schliesslich will ich an- und nicht einfügen.

...yks ;)
 
  • Probleme mit Delphi und ADO Beitrag #11
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Wie jetzt? Das geht doch, man nehme eine TDataSource, eine TADOTable und eventuell eine TADOConnection. Bei der Tabelle kannst Du wie gehabt Append, Insert, Edit benutzen.

ABER: Welchen Provider benutzt Du? Ich arbeite hier mit dem "normalen" Microsoft OLE DB Provider for SQL Server, der ja die Umsetzung auf die Datenbank übernimmt. Du schriebst oben was von Sybase, da wirst Du sicher einen anderen Provider benutzen. Möglicherweise läßt dieser kein Append zu. Eventuell hilft es, da einen anderen zu benutzen.

Verwandtes Problem: Wir beschäftigen (und verzweifeln) hier am asynchronen Fetching. Die Daten kommen zwar aysnchron rein, aber die Cancel-Prozedur braucht unheimlich lange, um den Prozeß abzubrechen. Nimmt man z.B. die Jet-Provider, um auf eine Access-DB zuzugreifen, funktioniert das Abbrechen bei gleichen Quelltexten. Alles eine Frage der Provider...

O Love
 
  • Probleme mit Delphi und ADO Beitrag #12
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Hi,

also ich nehme derzeit noch den ODBC-Provider, da ich im jetzigen Projekt mit Sybase arbeite. Da ich aber noch nicht weiss welche DBS in Zukunft auch uns zukommen und ich das Frontend nicht immer ändern will, gehe ich immer noch über ODBC auf das DBS.

TADOTable benutze ich derzeit nicht sondern TADODataSet.

...yks ;)
 
  • Probleme mit Delphi und ADO Beitrag #13
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
So jetzt hab ich endlich den Übertäter, der mir viele meiner neuen Probleme bereitet.
Ich hatte ja die "CursorLocation" und den "CursorTypen" umgestellt :(. Na super, das hatte schöne Exceptions ausgelöst. Das Append-Problem lag auch daran. Das RecNo immer -1 zurückgab, lag auch daran. Sogar über den DBNavigator das direkte navigieren auf den Letzten hat 'ne Exception ausgelöst.
In einem VB-Buch über ADO DB-Programmierung habe ich jetzt was schönes gelesen.
Wenn man "CursorLocation" und "CursorTypen" ändert, erhält man oft nicht erklärbare Seiteneffekt, da nicht genau spezifiert ist, wie es zu realisieren/implementieren ist.

Danke, da nehme ich ADO um nicht's mehr mit der BDE zu tun haben zu müssen und jetzt der Mist.

Also bin erstmal wieder auf "UseClient" gegangen und sieh da, es lüpt sauber. Aber ich wuss wieder mit Requery im "AfterPost" arbeiten.

Am besten war doch noch der direkte Zugriff auf die ODBC-API via C. Da weiss man was man hat und was passiert.

...yks ;)
 
Thema:

Probleme mit Delphi und ADO

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.181
Beiträge
1.579.175
Mitglieder
55.880
Neuestes Mitglied
Hahn
Oben