Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ado.Net Beispiele (https://www.delphipraxis.net/33211-ado-net-beispiele.html)

RuX 3. Nov 2004 08:54


Ado.Net Beispiele
 
Ich bin grad auf der Suche nach einem oder mehreren Beispielen für standard aktionen für ado.net
müsste nicht grundsätze oder zusammenhänge erklären, die sind klar, bloß schaff ichs grad nicht in ein dataset 2x daten rein zu laden, sprich das erste mal läd er daten rein, wenn ich dann das sql statement änder, alles neu cleare und dann neu öffne sind immernoch die gleichen daten drin :D

Robert_G 3. Nov 2004 09:55

Re: Ado.Net Beispiele
 
Na ein Simples DataAdapter.Fill füllt ein Dataset. (Und zwar immer wieder ;) )
Wenn du wirklichen einen DataAdapter nehmen willst:
  • Setze einen Primärschlüssel für dein DataSet
  • jetzt kannst du das machen:
    Delphi-Quellcode:
    var
      dsTemp :DataSet;
    begin
      dsTemp := DeinDataset.Clone();
      DeinDataAdapter.Fill(dsTemp);
      DeinDataSet.Merge(dsTemp, false);
    end;
    Du erzeugst ein neues DataSet und über die Methode Clone verpasst du ihm die gleiche Struktur wie deinem "richtigen" DS.
    Du füllst das temporäre DS mit dem DataAdapter. Jetzt kannst du über die Methode Merge beide DS "ineinanderschieben". (Dafür brauchst du aber einen Primärschlüssel ;) )

Aber immer dran denken: DataAdapter ist meist massiv langsamer als ein DataReader. ;)

RuX 3. Nov 2004 10:42

Re: Ado.Net Beispiele
 
ja mal sehn, ich bin z zt noch am rumspieln. außerdem würd ich gern das gleiche dataset wiederverwenden und mir nicht bei jedem query ein neues erzeugen

e: wie würd ich zb über den datareader daten in ein grid reinpacken? ich wollte erstemal standard funktionalitäten nachbauen, sprich navigieren, löschen, hinzufügen, abfragen usw. was sind dafür die besten/schnellsten techniken und wer kennt jetzt eigentlich ein tutorial oder beispiel? :)

Robert_G 3. Nov 2004 11:22

Re: Ado.Net Beispiele
 
Nochmal:
Du füllst ein temporäres DS. Dann rufst du die Methode Merge von deinem "richtigen" DS auf. Dadurch werden nur die geänderten/neuen Datensätze aus dem temporären DS in dein "richtiges" DS übernommen. (genau dafür brauchst du den Primärschlüssel ;) )

DataReader in einfach ;)
Delphi-Quellcode:
var
  conn :[IrgendeinProviderPrefix]Connection;
  cmd :[IrgendeinProviderPrefix]Command;
  rdr :[IrgendeinProviderPrefix]Datareader;
  tbl :DataTable;
  Values :array of System.Object;
begin
  tbl := DeinDataSet.Tables[Index/Name deiner Tabelle];
  conn := [IrgendeinProviderPrefix]Connection.Create('"USER ID=User;Password=Password;Data source="datasource"');
 
  cmd := [IrgendeinProviderPrefix]Command.Create('SELECT FROM IrgendeineTabelle'
                                                 , conn);
  conn.Open();
  rdr := cmd.ExecuteReader(CommandBehaviour.CloseConnection);
 
  Values := Array.CreateInstance(typeof(System.Object)
                                ,rdr.FieldCount);
  while (rdr.Read())
  begin
    rdr.GetValues(Values);
    tbl.LoadDataRow(Values, false);
  end;
 
end;
Wenn es schnell gehen soll ist ein Dataset vollkommen fehl am Platz (Das Ding ist eine kleine DB im RAM -> viel zu aufwenidig ;) ). Jede implementierung vin IList / ICollection sollte Databindingfähig sein. (Also auch jeder Nachfahre von CollectionBase oder ganz einfach: eine ArrayList :) )

RuX 3. Nov 2004 12:48

Re: Ado.Net Beispiele
 
naja ich möcht eben nicht mergen sondern komplett das resultset neu aufbauen, da es eben unterschiedliche tabellen seien können. verwende grad noch dataadapter, einfach zum einarbeiten testen, probieren usw...
stark vereinfacht schaut das aktuell bei mir so aus:

Delphi-Quellcode:
begin
  //conn=IfxConnection, adp=IfxDataAdapter, cmd=IfxCommand, ds=Dataset
  //alles komponenten aufm formular, schon initialisiert und verknüpft

  //hab noch ein datagrid das als source das dataset eingestellt hat
   
  cmd.CommandText := 'SELECT * FROM TabA';

  conn.Open;
  adp.Fill(ds);
  conn.Close;

  //jetzt stehn die sachen aus der abfrage im grid

  //mein grid soll jetzt ein anderes rs anzeigen
  cmd.CommandText := 'SELECT * FROM TabB';
  ds.Clear; //daten vom letzen query löschen
  //neue reinhaun

  conn.Open;
  adp.Fill(ds);
  conn.Close;
end;
so in etwa hatt ich mir das erstmal vorgestellt (weiß nicht ob ich da jetzt an alles gedacht hab, hab ich grad so ausm gedächtniss getippt), bloß ist das resultset genau das gleiche obwohl anderes statement. anscheinend fehlt da noch irgendwo n zusätzliches flush oä.

Robert_G 3. Nov 2004 19:08

Re: Ado.Net Beispiele
 
cmd ist sicher das SelectCommand deines da? :gruebel:

RuX 4. Nov 2004 08:12

Re: Ado.Net Beispiele
 
wenn du mit "da" dataadapter meinst, kann ich das bestätigen, ja :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz