AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spalten überprüfen...

Ein Thema von Simo · begonnen am 30. Apr 2014 · letzter Beitrag vom 5. Mai 2014
Antwort Antwort
Seite 2 von 2     12   
Simo

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

AW: Spalten überprüfen...

  Alt 2. Mai 2014, 13:21
Ich habe wie gesagt 3 Units :
1 Unit : Da werden die Funktionen programmiert.
2.Unit(VCL-Formular) : Code+Design, da wird definiert welche Überprüfung(Funktion) für welche Spalte durchzuführen ist ( in den ComboBoxen).
3.Unit (VCL-Formularanwendung). Da wurde schon alles (richtig) programmiert. und genau beim Prozedur SpeichernClick muss die Abfragen gemacht werden damit es eine Fehlermeldung gibt..!!

Ich weiss nicht wie ich 3 Code miteinander verbinde.. Wo soll ich was aufrufen.. -(?

Ich brauche Ihre Hilfe.. Ich komme nicht weiter!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#12

AW: Spalten überprüfen...

  Alt 2. Mai 2014, 14:00
Nur mal ganz schnell im vorbeischauen
warum hast Du Unit2 und Unit3 da wird doch das gleiche gemacht???
Wnn Du in Unit2 die Funktionen aus Unit1 brachst dann
Delphi-Quellcode:
Uses
  UNIT1, {Funktionen für ...}
  noch mehr units.......
  ;
Analog natürlich auch für andere Units. Nur bekommst Du ein Problem wenn Du
Delphi-Quellcode:
Unit1
uses unit2;
Delphi-Quellcode:
Unit2
uses unit1;
verwenden willst.
Funktionen, die in mehreren Units gebraucht werden gehören in eine eigene Unit:
Delphi-Quellcode:
Unitx
 blablabla

Unit1
  uses unitx;

unit2
  uses unitx;

Unit3
  uses unitx;

etc.
Und was Deine Doppelsuche angeht, es wäre wahrscheinlich besser die Daten in einer nonvisuellen Komponente/Struktur zu bevorraten (z.B. Array of Record), dort die Suche/ den Vergleich durchzuführen, in dieser oder einer zweiten Struktur die entsprechenden Informationen/Markierungen zu hinterlegen und diese dann in einem Grid anzuzeigen.
(aber das wurde glaub ich auch schon vorgeschlagen)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Simo

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

AW: Spalten überprüfen...

  Alt 2. Mai 2014, 14: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
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#14

AW: Spalten überprüfen...

  Alt 2. Mai 2014, 14:58
Wenn du immer nur den selben Kram postest, mit Doppelposts pushst usw., dann verlier ich auch irgendwie die Lust zu helfen, schließlich ist es hier im Forum auch nicht üblich die Hausaufgaben komplett zu machen. Daher hier mal mein letzter Ansatz, danach musst du allein weiter machen:
(ist ungetestet, da nur hier in den Editor getippt)


Unit 1: Checkfunktionen:
Delphi-Quellcode:
unit MyChkXML;

interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes,Forms, Dialogs, ExtCtrls,
     StdCtrls, Buttons,ggStringGrid,Grids ;

type
  TCheck = Record
    Column:integer;
    Rule:integer;
  end;

  TChecklist = array of TCheck;

  TMyChek = class
  private
    MSG:TStringlist;
    Checklist:TChecklist;
    Grid:TStringGrid;

    function Check(Checknumber:Integer):Boolean;
    function MyChekGleich(Column:Integer):Boolean;
    function MyChekInteger(Column:Integer):Boolean;
    function MyChekFloat(Column:Integer) :Boolean;
  public
    procedure AddCheck(Column,Rulenumber);
    function ExecuteCheck:Boolean;
    function CheckResults:String;
    constructor create(AGrid:TStringGrid);
    destructor destroy;
  end;

implementation

constructor TMyChek.Create(AGrid:TStringGrid);
begin
  inherited create;
  Grid:=AGrid;
  MSG:=TStringlist.create;
end;

desctructor TMyChek.Destroy();
begin
  MSG.Free;
  inherited;
end;

procedure TMyChek.AddCheck(Column,Rulenumber);
begin
  SetLength(Checklist,Length(Checklist)+1);
  Checklist[High(Checklist)].Column:=Column;
  Checklist[High(Checklist)].Rule:=Rulenumber;
end;

function TMyChek.ExecuteCheck:Boolean;
var i:integer;
begin
  Result:=true;
  for i:=Low(Checklist) to High(Checklist) do
    if not Check(i) then
      Result:=false;
end;

function TMyChek.Check(Checknumber):Boolean;
begin
  if Checklist[i].Rule = 0 then
    Result:=MyChekGleich(Checklist[i].Column)
  else if Checklist[i].Rule = 1 then
    Result:=MyChekInteger(Checklist[i].Column)
  else if Checklist[i].Rule = 2 then
    Result:=MyChekFloat(Checklist[i].Column)
  else
    Result:=true; //Keine bekannte Regel, dann immer OK
end;

function TMyChek.MyChekInteger(Column:Integer):Boolean;
var i:Integer;
    input:String;
    output:integer;
begin
  Result:=true;
  for i:=0 to Grid.Rows-1 do //Grid.Rows.Count-1 ???
    begin
    input:=Grid.Cells[Column,i];
    if not TryStrToFloat(input,output) then
      begin
      if Result then
        MSG.Add('Spalte: '+IntToStr(Column)+', Regel: 1 (CheckInteger)')
      MSG.Add('Fehler in Reihe '+IntToStr(i)+': '+input)
      Result:=false;
      end;
    end;
end;

function TMyChek.MyChekFloat(Column:Integer): Boolean;
begin
  //Analog
end;

function TMyChek.MyChekGleich(Column:Integer):Booelean ;
begin
  //Schon was schwieriger, aber solltest du auch hinkriegen.
end;

end.
Zu Problem Nr. 2 schau dir wie gesagt mal das Ini-Tutorial an.

Viel Erfolg, ich bin raus.
Ralph

Geändert von Jumpy ( 2. Mai 2014 um 15:03 Uhr)
  Mit Zitat antworten Zitat
Simo

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

AW: Spalten überprüfen...

  Alt 5. Mai 2014, 06:55
Vielen Dank Ralph

Ja du hast recht..sorry
Ich versuche es jetzt allein..

Danke alle für Ihre Hilfe..-)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:38 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