Thema: Delphi Spalten überprüfen...

Einzelnen Beitrag anzeigen

Simo

Registriert seit: 28. Apr 2014
51 Beiträge
 
#13

AW: Spalten überprüfen...

  Alt 2. Mai 2014, 15:41
Vielen Danke für die Antwort..-)

Wie gesagt Der Editor war schon programmiert (Nicht von mir.. bin noch ein Anfänger). Mit dem Editor kann man Dateien öffnen und sie mit den Funktionen Suchen/Ersetzen, finden...bearbeiten.
Die erste Aufgabe war : dem Projekt eine neue Unit hinzufügen und eine Funktion schreiben, die die erste Spalte auf doppelter Eintrag überprüft und wenn ein Doppelter Eintrag vorkommt, eine Fehlermeldung wird ausgegeben. Das war einfach
Ich habe sie programmiert.. (Ob Cells[0,a]=Cells[0,c]).. das war ja einfach. Dann zwei andere Funktionen.

die zweite Aufgabe : Es soll die einzelnen Spalten mit den unterschiedlichen Inhalten der (verschiedenen) Tabellen überprüft werden.
Anforderungen : Eine neue Formular zu erstellen, Da kann man die Regeln definieren (im ComboBox1 : MyRegeln1..MyRegeln9) ist aber egal. im GroupBox sind 15 ComboBoxen mit den gleichen Items (Funktionen). ComboBox1 für Spalte1.. ComboBox2 für Spalte2..usw. Da wird eingestellt welche Überprüfung für welche Spalte..

In der schon programmierten Unit (unit1) des Editors muss beim Prozedur SpeichernClick die Abfrage gemacht. Denn wenn ich in der Tabelle was bearbeitet habe und im Menu über Datei : Speichern klicke
soll die Überprüfung durchgeführt und eine Fehlermeldung ausgegeben werden.

Leider kann ich das nicht anders machen und muss meine Funktion/Funktionen umprogrammieren dass sie von der Einstellung der ComboBoxen abhängig werden.Und weiss nicht wo ich genau die Abfragen tue..


Zu Unit1 : wo die Funktion/Funktionen sind.

Delphi-Quellcode:
function TMyChek.MyChekGleich(StringGrid:TggStringGrid; Spaltennummer:Integer):Integer ;
//wobei ich die Funktion umbennenen würde, in das was sie macht, nämlich die erste Zeile liefern, //in der was doppelt vorkommt also somit sowas wie:
//function TMyChek.GetFirstRepetition(StringGrid:TggStringGrid; Spaltennummer:Integer):Integer ;
var
  a , b ,c : integer;
  Inhalt_Check : string;
  iDoppeltcounter:integer;
begin
  iDoppeltcounter:=0;
  Result:=0;//Ich würde sagen, wenn 0 zurückkommt, gibt es keine Doppelten

  b:= StringGrid.RowCount; // Anzahl der Zeilen...

  for a:=0 to b do begin //müsste meiner Meinung nach b-1 sein
    Inhalt_Check:=StringGrid.Cells[Spaltennummer,a]; //Zeile Um 1 erhöhen...
     for c:=0 to b do begin //b-1 s.o.?
        if Inhalt_Check=StringGrid.Cells[Spaltennummer,c] then begin
           //iDoppeltcounter:=iDoppeltcounter+1;
           Inc(iDoppeltcounter);
             if iDoppeltcounter>1 then begin
                 Result:=c;
                 //StringGrid.Selection:=
                 exit;
                 iDoppeltcounter:=0;
             end;
        end;
     end;
  end;
end;
Zu Unit2 : Code+Design

Delphi-Quellcode:
 type
    Regel = record
      Spalte : Array [1..15] of string ;
      Kriterium : string ;
    end;

    const MaxAnzahlRegeln=9;
    const SpaltenAnzahl=15;

    var
    MyRegeln : Array [1..MaxAnzahlRegeln] of Regel;

Delphi-Quellcode:
type
TFMRegeln = class(TForm)
    Label1: TLabel;
    ...
    Label15:TLabel;
    ...
    ComboBox1 :TComboBox;
    ...


procedure ComboBoxChangeAlg(Sender: TObject);//Hier habe ich in Ereignisse [B]Onchange[/B] 'ComboBoxChangeAlg' für alle ComboBoxen gemacht, damit ich nur ein Prozedur dann habe..


// Zuweisung des ausgewählten Textes der ComboBoxen... Tag:1,2.. 15
procedure TFMRegeln.ComboBoxChangeAlg(Sender: TObject);

begin
  MyRegeln[STrToInt(ComboBox1.Text)].Spalte[(Sender as TComboBox).Tag]:=(Sender as TComboBox).Text;
end;


[B]Zu Unit3, wo alles programmiert ist (nicht von mir).[/B

Delphi-Quellcode:
...
...
///////////////////////////////////////////////////////////////////////////////
////////////////////////// XML File speichern
procedure TForm1.Speichern1Click(Sender: TObject);
var
  MyXML:TBATM4XMLClass;
  i,r,S:integer;
  MyCheck:TMyChek;
  iResult:integer;
  b : Boolean;

begin


  MyCheck:=TMyChek.Create;
  iResult:=MyCheck.MyChekGleich(MainGrid);

  b:=MyCheck.MyChekFloat('10');
  //b:=MyCheck.MyChekInteger('10.4') ;

  if iResult<>-3 then begin
     Showmessage(' Doppelter Eintrag : ' + IntTostr(iResult));

  Freeandnil(MyCheck);



  if UPPERCASE(copy(Filename,length(Filename)-2,3)) = 'TXTthen begin
    SavetextFile();
  end else begin
    if Fileexists(Filename) then begin
      if UPPERCASE(copy(Filename,length(Filename)-2,3)) = 'TXTthen begin
        SavetextFile();
      end;
      if UPPERCASE(copy(Filename,length(Filename)-2,3)) = 'XMLthen begin
        SaveXMLFile();
      end;
    end;
  end;
end;
...
...

Das sind 3 verschiedene Units.. Was soll ich korrigieren? Wie kann ich diese Variable 'Tag' der ComboBoxen ausnutzen, dass meine Funktion es erst nach der Einstellung tut!!

Vlt störe ich oder verstehe nicht ganz was ihr vorschlägt.. .Ich bin noch ein Anfänger in Delphi und versuche mich einzuarbeiten und hoffe auf Ihr Verständnis..

Ich wäre sehr dankbar wenn Sie mir helfen können, dass ich es nicht alles ändern muss..

LG
  Mit Zitat antworten Zitat