AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Inhalt von 2 Stringgrids Synchronisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Inhalt von 2 Stringgrids Synchronisieren

Ein Thema von 5etH · begonnen am 8. Jun 2009 · letzter Beitrag vom 8. Jun 2009
Antwort Antwort
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#1

Inhalt von 2 Stringgrids Synchronisieren

  Alt 8. Jun 2009, 07:58
Hallo Zusammen,

momenten beiße ich mir echt die Zähne aus an der Synchro von 2 Stringgrids.

Momentan arbeite ich mit einer einfachen DB die es einmal local und einmal portabel gibt.
Diese beiden würde ich gerne synchronisieren jedoch stoße ich auf etliche Problem, wenn ich einen Fehler behebe tauchen 5 neue auf und ich weiß jetzt auch echt nicht mehr was ich noch machen soll.

Es sollen alle Einträge zusammengefügt werden, sprich eine Combi aus beiden ohne doppelte Einträge.

Meine Frage:
Ist das generell einfach zu realisieren und Denke ich einfach nur zu kompliziert?
Hat jemand sowas schon geschrieben das ich benutzen dürfte?
Wie gehe ich die Problematik am einfachsten an.


Mein eher schlechter Code:

Delphi-Quellcode:

loadgrid(Stringgrid4,Extractfilepath(paramstr(0))+'\DATA.SUX');//Locale DB


for X := 0 to Stringgrid2.rowCount - 1 do
begin
da := False;
  for Y := 0 to Stringgrid4.rowCount - 1 do//Locale DB
  begin
    if Stringgrid2.Cells[0,X] = Stringgrid4.Cells[0,Y] then // Portable DB
      begin
        da := true;
      end;
  end;
  if not da then
  begin
    stringgrid4.Rowcount:=stringgrid4.RowCount +1;
    for z := 0 to 3 do
      begin
        stringgrid4.Cells[Z,Stringgrid2.rowcount] := stringgrid2.Cells[Z,X];
      end;
  end;


  end;
Ich weis das das kein Glanzstück ist

trotzdem hoffe ich das ihr mir weiterhelfen könnt
Grüße
Manuel
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Inhalt von 2 Stringgrids Synchronisieren

  Alt 8. Jun 2009, 08:20
Wie groß sind die StringGrid's (also wieviel Zeilen) und ist die Sortierung irgendwie von Bedeutung?

Im Prinzip schon so, das man StringGrid_A mit Zeilen aus StringGrid_B füllt sofern die nicht da sind. Am Ende kopiert man A 1:1 nach B.

Sind die StringGrid's groß, dann lohnt sich ein Array of TStringList als Püffer für die Zeilen.
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Inhalt von 2 Stringgrids Synchronisieren

  Alt 8. Jun 2009, 08:28
ich denke mal nicht das die Records über 300 gehen aber trotzdem funzt das nicht und ich hab ka wo mein fehler ist
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Inhalt von 2 Stringgrids Synchronisieren

  Alt 8. Jun 2009, 09:00
300 Zeilen ist wenig, selbst 1000 sind noch wenig. StringGrids werden so ab 10.000 ziemlich verschwenderisch.

Also ich würde die Aufgaben erst mal aufsplitten, StringGrid Reihen sind normale TStrings.

1) Funktion zum Vergleichen von TStrings (evtl ginge sogar ein Vergleich von DelimitedText)
2) Schleife die ungleiche TStrings in einem Grid oder Array sammeln
3) Das Grid (oder Array), das gesammelt hat in das andere kopieren


1)
Delphi-Quellcode:
function StrListEqual(StringsA, StringsB : TStrings):Boolean;
var
  i, Count : Integer;
begin
  Result := False;
  Count := StringsA.Count;
  if Count = StringsB.Count then
  begin
    i := 0;
    while i < Count do
      if StringsA[i] <> StringsB[i] then Exit;
    Result := True;
  end;
end;
3)
Delphi-Quellcode:
procedure CopyStringGrid(FromGrid, ToGrid : TStringGrid);
var
  i, Count : Integer;
begin
  Count := FromGrid.RowCount;
  ToGrid.RowCount := Count;
  for i := 0 to Count-1 do
    ToGrid.Rows[i].Assign(FromGrid.Rows[i]);
end;
Fehlt noch die Aufgabe 2)

StringGrid B zeilenweise mit A Vergleichen und bei Bedarf an A anhängen. Danach A -> B kopieren. Der Vergleich kann noch mit UpperCase CaseInsensiv gestaltet werden. bei neueren Delphi-Versionen kann auch DelimitedText mit CompareStr verglichen werden.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#5

Re: Inhalt von 2 Stringgrids Synchronisieren

  Alt 8. Jun 2009, 09:58
Hallo,

Row[x].Text kann man auch direkt vergleichen.

Hier mal mein Ansatz, als Inline-Prozedur, da A mit B und B mit A verglichen werden muss.

Delphi-Quellcode:
procedure SynchronisiereGrids(SG1,SG2: TStringGrid);

  //**** inline *******
  {} procedure Synchronisiere(SGSource, SGDest: TStringGrid);
  {} var z,zz : Integer;
  {} begin
  {}   for z := 0 to SGSource.RowCount-1 do
  {}     for zz := 0 to SGDest.RowCount-1 do
  {}       begin
  {}       if SGSource.Rows[z].Text = SGDest.Rows[zz].Text then
  {}         break;
  {}       if zz = SGDest.RowCount-1 then //nicht gefunden
  {}         begin
  {}         SGDest.RowCount := SGDest.RowCount + 1;
  {}         SGDest.Rows[SGDest.RowCount-1].Assign(SGSource.Rows[z]);
  {}         end;
  {}       end;
  {} end;
  //***** Ende inline ******

begin
  Synchronisiere(SG1,SG2);
  Synchronisiere(SG2,SG1);
end;
Der Aufruf
 SynchronisiereGrids(StringGrid_A,StringGrid_B); //Edit: nicht benutzte Variable c gelöscht
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Inhalt von 2 Stringgrids Synchronisieren

  Alt 8. Jun 2009, 10:25
Das ich TStrings.Text vergessen hab', heißt jetzt ich, das ich mir wegen meines Alters schon langsam Sorgen machen muss?

@Lannes: Sieht natürlich besser aus... könnte höchstens noch mit weniger Schleifendurchläufen punkten.
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:31 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