Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Do 29.12.05 17:39 
Hallo, hab ein problem, ich habe ein Paar Editfelder und eine html Datei, in die Daten aus den Editfelder so hineingeschrieben werden:
ausblenden Quelltext
1:
SLAlkoven.Add('<tr> <td width="400">'+DBMemo1.Text+'<hr></td> <td valign="top"><span style="font-family:''Times New Roman'',Times,serif; font-weight:bold; font-size:12pt">'+EBezeichnung.Text+'</span><br><br>'+'<img src="data/images/gebrauchte/'+EBild.Text+'.jpg"></td></tr>');					


Meine Frage:
Wie kann ich jetzt diese Daten wieder aus der Datei löschen? Die EIngabemaske sozusagen ist ja immer die gleiche, also wenn die Daten der einzelnen Felder mit einem Datensatz in der Datei übereinstimmen, soll der Der Datensatz in der Datei koplett mit den html Tags gelöscht werden. Die kann ich das nun machen?
Mit
ausblenden Quelltext
1:
SLAlkoven.Delete('<tr> <td width="400">'+DBMemo1.Text+'<hr></td> <td valign="top"><span style="font-family:''Times New Roman'',Times,serif; font-weight:bold; font-size:12pt">'+EBezeichnung.Text+'</span><br><br>'+'<img src="data/images/gebrauchte/'+EBild.Text+'.jpg"></td></tr>');					

geht es nicht, da kommt dann immer Incompatible types: Integer and String.
Das ist ja auch verständlich nur wie kann ichs jetzt machen das es funktioniert?
Für Hilfe wäre ich sehr dankbar, komm da nicht weiter.
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: Do 29.12.05 17:53 
Uups, so'n Mist, meine Glaskugel ist gerade zerbrochen :-)

Aber mal im ernst:
Poste doch mal mehr von Deinem Code und beschreibe mal etwas verständlicher,
was Du GENAU willst.
Sonst fallen mir im Momement nur solche Schlagworte wie
StringReplace oder Pos ein.

Moin
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Do 29.12.05 18:24 
Also ich habe Edirfelder, 4 Stück, dann habe ich eine Stringliste, in die ich die Daten der Editfelder hineinschreiben lasse:
ausblenden Quelltext
1:
2:
SLAlkoven := TStringList.Create;
alkoven:= 'E:\Programme\Borland\Delphi7\Projects\alkoven.txt';

Wenn ich auf einen Button klicke dnn macht er folgendes:
ausblenden Quelltext
1:
2:
3:
4:
 
SLAlkoven.LoadFromFile(alkoven);
SLAlkoven.Add('<tr> <td width="400">'+DBMemo1.Text+'<hr></td> <td valign="top"><span style="font-family:''Times New Roman'',Times,serif; font-weight:bold; font-size:12pt">'+EBezeichnung.Text+'</span><br><br>'+'<img src="data/images/gebrauchte/'+EBild.Text+'.jpg"></td></tr>');
SLAlkoven.SaveToFile(alkoven);


Jetzt stehen meine Eingaben von den Editfeldern mit html Code in der Datei alkoven.txt
Das Problem:
Wenn ich jetzt das gleiche in meine Editfelder eingebe, soll wenn ich auf meinen "löschen" Button drücke dieserDatensatz, der ja dann schon in der Datei vorhanden ist gelöscht werden, wie mach ich das nun, ich hoffe ich konnte mich jetzt verständlich ausdrücken.
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: Do 29.12.05 18:32 
Ich hoffe ich habe Dich verstanden.

Also, Du liest die Datei in Deine Stringlist ein,
und dann gehst Du zeile für Zeile der Stringlist durch und vergleichst die aktuelle Zeile mit
Deinem Vergleichsstring.
Ist der String identisch, dann schmeist Du ihn aus Deiner Stringlist raus.
Anschließend schreibst Du die Stringlist wieder in die Datei.
Ich denke mal, das ist hinzukriegen.

Moin
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Do 29.12.05 18:42 
Es wäre schön wenn du mir einen sagt was ich da ungefär einzugeben hätte, also nich direkt für mein Projekt, nur mal was allgemeines, ich weis jetzt nämlich nicht, wie man das vergleicht.
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: Fr 30.12.05 08:34 
Ok,

vergleichen tust Du mit dem "=" Zeichen.

Das heißt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure BlaBla;
Var I : Integer;
Begin
For I := 0 To SlAlkoven.Count -1 Do                                      // Nacheinander alle Zeilen durchgehen
 if SLAlkoven[I] = ''<tr> <td width="400">'+DBMemo1.Text+                // Vergleichen
           '
<hr></td> <td valign="top"><span style="font-family:'
           '
Times New Roman'',Times,serif; font-weight:bold; font-size:12pt">'+
           EBezeichnung.Text+'
</span><br><br>'+'<img src="data/images/gebrauchte/'+
           EBild.Text+'
.jpg"></td></tr>' Then
 SlAlkoven.Delete(I);                                                    // Und wenn vorhanden, dann löschen
end;
Moin
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Fr 30.12.05 17:58 
Danke, das geht alles soweit, nur, wenn ich den gleichen Eintrag zweimal in meiner Datei sthen hab und dann auf meinen Löschen button drücke, dann kommt da:" List index out of bounds (5) ", kann ich das irgendwie unterbinden? Er soll eigentlich nur einen der beiden einträge löschen.
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Sa 07.01.06 12:40 
Huhu kann mir nichtmal jemand eine Antwort geben dafür oder gibts da keine, kann ich mir aber nicht vorstellen. Helft mir doch mal bitte,
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: Sa 07.01.06 15:08 
Zeig uns mal mehr von Deinem Code.
Sonst wird eine Hilfestellung eher schwierig.

Moin
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Sa 07.01.06 17:41 
Der Quelltext:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button2Click(Sender: TObject);
Var I : Integer;
Begin
For I := 0 To SlAlkoven.Count -1 Do                                      // Nacheinander alle Zeilen durchgehen
 if SLAlkoven[I] = ''<tr> <td width="400">'+DBMemo1.Text+                // Vergleichen
           '
<hr></td> <td valign="top"><span style="font-family:'
           '
Times New Roman'',Times,serif; font-weight:bold; font-size:12pt">'+
           EBezeichnung.Text+'
</span><br><br>'+'<img src="data/images/gebrauchte/'+
           EBild.Text+'
.jpg"></td></tr>' Then
 SlAlkoven.Delete(I);             // Und wenn vorhanden, dann löschen
SLAlkoven.SaveToFile(alkoven);                         
end;


So siehts aus aber wie gesagt, das Problem ist die Fehlermeldung wenn mehrere gleiche Datensätze vorhanden sind. die soll dann auch alle gelöscht werden, aber er gibt nur die oben genannte Fehlermeldung aus.

Da gibt es auch noch ein kleines problem: Es soll das Stück: '<img src="data/images/gebrauchte/'+
EBild.Text+'.jpg"> nicht mit auf übereinstimmung geprüft werden, aber wenn ich es einfach löschen, stimmt dann der Datensatz ja nichtmehr mit dem schon in der Datei vorhandenen überein und er löscht den Datensatz nichtmehr, also da bräucht ich auch noch Hilfe wenns geht
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: Sa 07.01.06 18:01 
Mal sehen...
Beim Löschen bekommst Du also irgendwann die Meldung
"List Index out of Bounds"

Vielleicht verschluckt sich Delphi da ja an der geänderten Menge
der Einträge in Deiner ListBox.
Drehen wir also einfach die Schleife um,
und gehen von hinten nach vorne durch:

ausblenden Delphi-Quelltext
1:
2:
For I := SlAlkoven.Count -1 downto 0 Do                  // Nacheinander von hinten alle Zeilen durchgehen  
 if SLAlkoven[I] ...                                     // ok und hier dan evtl. Löschen

Tja, und wenn Du nicht die ganze Zeile vergleichen willst,
dann kommst Du nicht darum herum mit POS zu arbeiten:

ausblenden Delphi-Quelltext
1:
2:
3:
If (Pos(Ebezeichnung.Text,SLAlkoven[i]) > 0AND         // Sind die Texte aus den Eingabefeldern
   (Pos(EBild.Text,SLAlkoven[i]) > 0Then               // im String der Listbox vorhanden
   SLAlkoven.delete[i]                                   // dann weg damit


Vielleicht kommst Du jetzt ja ein wenig weiter
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Sa 07.01.06 18:36 
Danke das war es was ich suchte
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Sa 07.01.06 21:33 
Hab ein riesen Problem, hab das jetzt so gemacht
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button2Click(Sender: TObject);
Var I : Integer;
Begin
if CSparte.ItemIndex=0 then
begin
SLAlkoven.LoadFromFile(alkoven);
For I := SlAlkoven.Count -1 downto 0 Do                                      // Nacheinander alle Zeilen durchgehen
 if (Pos(Ebezeichnung.Text,SLAlkoven[i]) > 0AND         // Sind die Texte aus den Eingabefeldern
   (Pos(DBMemo1.Text,SLAlkoven[i]) > 0Then               // im String der Listbox vorhanden
   SLAlkoven.delete(i);

 SLAlkoven.SaveToFile(alkoven);


Es funktioniert auch einwandfrei ABER:
Ich hab die exe Datei nun in dein anderen Ordner verschoben und jetzt so ausgeführt, nun löscht er meine Datensätze nichtmher, aber alles andere funzt soweit noch, woran kann das liegen?
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: So 08.01.06 13:24 
Hmmm, meine Glaskugel hat gerade den Geist aufgegeben....

Also, entweder Du lieferst mehr Quellcode,
oder aber, Du versuchst mal selber Deine Probleme zu lösen.

Moin
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: So 08.01.06 14:18 
Dann eben noch mehr quellcode wenn es der Problemlösung beiträgt aber ich weis nicht was ich da noch mehr quellcode posten soll:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
unit caratech;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Buttons, ComCtrls, FMTBcd, DB, SqlExpr,
  DBTables, OleServer, WordXP, DBClient, DBGrids, ExtCtrls, DBCtrls, Mask,
  Menus, IniFiles, XPMan, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, WinInet, jpeg, WinSock, IdFTP, IdAntiFreezeBase, IdAntiFreeze,
  ExtDlgs, printers, OleCtrls, SHDocVw;


type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    EBild: TDBEdit;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Schlieen1: TMenuItem;
    ClientDataSet1: TClientDataSet;
    DataSource1: TDataSource;
    ClientDataSet1ID: TAutoIncField;
    ClientDataSet1Sparte: TStringField;
    ClientDataSet1Bezeichnung: TStringField;
    ClientDataSet1Beschreibung: TMemoField;
    ClientDataSet1Bildname: TStringField;
    DBGrid1: TDBGrid;
    DBMemo1: TDBMemo;
    EBezeichnung: TDBEdit;
    CSparte: TDBComboBox;
    Label4: TLabel;
    Label5: TLabel;
    StatusBar1: TStatusBar;
    XPManifest1: TXPManifest;
    Bearbeiten1: TMenuItem;
    htmlDateierstellen1: TMenuItem;
    htmlDateihochladen1: TMenuItem;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    IdFTP1: TIdFTP;
    IdTCPClient1: TIdTCPClient;
    ProgressBar1: TProgressBar;
    IdAntiFreeze1: TIdAntiFreeze;
    Bilderhochladen1: TMenuItem;
    OpenPictureDialog1: TOpenPictureDialog;
    GroupBox2: TGroupBox;
    DBNavigator1: TDBNavigator;
    Vorschau1: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Schlieen1Click(Sender: TObject);
    procedure htmlDateierstellen1Click(Sender: TObject);
    procedure htmlDateihochladen1Click(Sender: TObject);
    procedure FtpVerbindung;
    procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure Bilderhochladen1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Vorschau1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure CreateParams(var Params: TCreateParams); override;
  public
    { Public declarations }
  end;

var
  FTP_info, host, ipad, clientverzeichnis, Serververzeichnis, Datendatei:string;
  RTT, code, hopCount: dword;
  FTP_Status:Integer;
  BytesToTransfer: LongWord;
  Form1: TForm1;
  inifile: TInifile;
  test, ftpdat: string;
  MyItem: TListItem;
  header, article, alkoven, teilintegriert, kastenwagen, wohnwagen, footer:String;  SLHeader, SLArticle, SLAlkoven, SLTeilintegriert, SLKastenwagen, SLWohnwagen, SLFooter, flist, SLComplete: TStrings;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

  ClientDataSet1.LoadFromFile((ExtractFileDir(Application.ExeName))+'\Datadb.xml');
 SLHeader:= TStringList.Create;
  SLFooter := TStringList.Create;
  SLComplete := TStringList.Create;
  SLAlkoven := TStringList.Create;
  SLTeilintegriert := TStringList.Create;
  SLKastenwagen := TStringList.Create;
  SLWohnwagen := TStringList.Create;
  alkoven:= (ExtractFileDir(Application.ExeName))+'\alkoven.txt';
  teilintegriert:= (ExtractFileDir(Application.ExeName))+'\teilintegriert.txt';
  kastenwagen:= (ExtractFileDir(Application.ExeName))+'\kastenwagen.txt';
  wohnwagen:= (ExtractFileDir(Application.ExeName))+'\wohnwagen.txt';
   inifile := TIniFile.Create(IncludeTrailingPathDelimiter(ExtractFileDir(Application.ExeName)) + 'ftp.ini');
  clientverzeichnis := inifile.ReadString('ftp''clientverzeichnis''');
  serververzeichnis := inifile.ReadString('ftp''serververzeichnis''');
  Datendatei := inifile.ReadString('ftp''htmlDateiname''');

end;


procedure TForm1.Button2Click(Sender: TObject);
Var I : Integer;
Begin
if CSparte.ItemIndex=0 then
begin
SLAlkoven.LoadFromFile(alkoven);
For I := SlAlkoven.Count -1 downto 0 Do                                      // Nacheinander alle Zeilen durchgehen
 if (Pos(Ebezeichnung.Text,SLAlkoven[i]) > 0AND         // Sind die Texte aus den Eingabefeldern
   (Pos(DBMemo1.Text,SLAlkoven[i]) > 0Then               // im String der Listbox vorhanden
 SLAlkoven.delete(i);
 SLAlkoven.SaveToFile(alkoven);


end
else
if CSparte.ItemIndex=1 then
begin
SLTeilintegriert.LoadFromFile(teilintegriert);
For I := SLTeilintegriert.Count -1 downto 0 Do                                     // Nacheinander alle Zeilen durchgehen
 if (Pos(Ebezeichnung.Text,SLTeilintegriert[i]) > 0AND         // Sind die Texte aus den Eingabefeldern
   (Pos(DBMemo1.Text,SLTeilintegriert[i]) > 0Then
 SLTeilintegriert.Delete(I);
 SLTeilintegriert.SaveToFile(teilintegriert);

end
else
if CSparte.ItemIndex=2 then
begin
SLKastenwagen.LoadFromFile(kastenwagen);
For I := SLKastenwagen.Count -1 downto 0 Do                                     // Nacheinander alle Zeilen durchgehen
  if (Pos(Ebezeichnung.Text,SLKastenwagen[i]) > 0AND         // Sind die Texte aus den Eingabefeldern
   (Pos(DBMemo1.Text,SLKastenwagen[i]) > 0Then
 SLKastenwagen.Delete(I);
 SLKastenwagen.SaveToFile(kastenwagen);

end
else
begin
SLWohnwagen.LoadFromFile(wohnwagen);
For I := SLWohnwagen.Count -1 downto 0 Do                                       // Nacheinander alle Zeilen durchgehen
  if (Pos(Ebezeichnung.Text,SLWohnwagen[i]) > 0AND         // Sind die Texte aus den Eingabefeldern
   (Pos(DBMemo1.Text,SLWohnwagen[i]) > 0Then
 SLWohnwagen.Delete(I);
 SLWohnwagen.SaveToFile(wohnwagen);
end;
end;

Das ist das Stück Quellcode, was nicht funktioniert! Noch den Rest Quellcode?
Aber das funktioniert ja alles...
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: So 08.01.06 14:58 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.FormCreate(Sender: TObject);  
begin  
  ClientDataSet1.LoadFromFile((ExtractFileDir(Application.ExeName))+'\Datadb.xml');  
 SLHeader:= TStringList.Create;  
  SLFooter := TStringList.Create;  
  SLComplete := TStringList.Create;  
  SLAlkoven := TStringList.Create;  
  SLTeilintegriert := TStringList.Create;  
  SLKastenwagen := TStringList.Create;  
  SLWohnwagen := TStringList.Create;  
  alkoven:= (ExtractFileDir(Application.ExeName))+'\alkoven.txt';  
  teilintegriert:= (ExtractFileDir(Application.ExeName))+'\teilintegriert.txt';  
  kastenwagen:= (ExtractFileDir(Application.ExeName))+'\kastenwagen.txt';  
  wohnwagen:= (ExtractFileDir(Application.ExeName))+'\wohnwagen.txt';  
   inifile := TIniFile.Create(IncludeTrailingPathDelimiter(ExtractFileDir(Application.ExeName)) + 'ftp.ini');  
  clientverzeichnis := inifile.ReadString('ftp''clientverzeichnis''');  
  serververzeichnis := inifile.ReadString('ftp''serververzeichnis''');  
  Datendatei := inifile.ReadString('ftp''htmlDateiname''');  
end;


Tja, Dein Programm erwartet sämtliche Dateien
im selben Verzeichnis wie das Programm selbst.
Wenn Du die Exe verschiebst, müssen sämtliche
anderen Dateien in das selbe Verzeichnis.

Im übrigen würde ich Dir (für die Übersichtlichkeit)
in Deinem Code empfehlen, eine Variable mehr zu
deklarieren, und der dann denn Wert (String) des
Programmverzeichnisses übergeben, danach liest sich dann
dein Code wesentlich angenehmer:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.FormCreate(Sender: TObject);  
begin  
 StartDir := ExtractFilePath(ParamStr(0));                                      // Startverzeichnis feststellen
  ClientDataSet1.LoadFromFile(StartDir+'\Datadb.xml');  
  SLHeader:= TStringList.Create;  
  SLFooter := TStringList.Create;  
  SLComplete := TStringList.Create;  
  SLAlkoven := TStringList.Create;  
  SLTeilintegriert := TStringList.Create;  
  SLKastenwagen := TStringList.Create;  
  SLWohnwagen := TStringList.Create;  

  alkoven:= StartDir+'alkoven.txt';  
  teilintegriert:= StartDir+'teilintegriert.txt';  
  kastenwagen:= StartDir+'kastenwagen.txt';  
// bla bla bla bla
 end;


So könntest Du dann auch noch relativ leicht und
gut lesbar mit Unterverzeichnissen arbeiten,
in dem Du alle Deine "Datenbanken" in ein Unterverzeichnis
"DAT" verschiebst und aus Deinem Programm heraus diese dann
von dort aus öffnest, aber das ist Geschmackssache
(müllt aber Dein Programmverzeichnis nicht so zu).
ausblenden Delphi-Quelltext
1:
allkoven := StartDir+'dat\allkoven.txt';					


Moin
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: So 08.01.06 15:12 
Danke für den Tipp, aber meinst du daran liegt es das die löschprozedur nicht funktioniert, ich hab alle Dateien im gleichen Verzeichnis, aber diese Prozedur funzt nicht obwohl alle anderen Prozeduren funktionieren.
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: So 08.01.06 17:13 
Ich hab Dich jetzt nicht wirklich verstanden.
Welche Procedure funktioniert denn nicht.

Wie wäre es denn, nebenbei bemerkt, deine Funktion
zum löschen der Datensätze in eine eigene Procedure zu packen und so
zu formulieren, daß sie für alle Deine "Datenbanken" funktioniert.

Dein Code wird dann übersichtlicher, besser zu warten und Du
brauchst auch längst nicht mehr so viele variablen vom Typ TStringList.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Procedure CheckDatenbank(Datei,Text1,Text2:String);
Var I : Integer;  
    SL : TstringList;
Begin 
SL.Create; 
SL.LoadFromFile(Datei);  
For I := Sl.Count -1 downto 0 Do                                      // Nacheinander alle Zeilen durchgehen  
 if (Pos(Text1,SL[i]) > 0AND                                        // Sind die Texte aus den Eingabefeldern  
   (Pos(Text2,SL[i]) > 0Then                                        // im String der Listbox vorhanden  
 SL.delete(i);  
 SL.SaveToFile(Datei);
 SL.Free;  
end

Damit könntest Du Deine Procedure Button2Click (ist 'n scheiß Name) wesentlich übersichtlicher halten:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button2Click(Sender: TObject);  
Begin  
Case CSparte.ItemIndex of
 0 : CheckDatenbank(Alkoven,EBezeichnung.Text,DBMemo1.Text);
 1 : CheckDatenbank(Teileintegriert,EBzeichnung.Text, DBMemo1.Text);
 Bla Bla Bla
 End;
End;

Tja, und wenn Du immer nur die Selbern werte vergleichst, "EBezeichnung.Text und DBMemo1.Text"
dann brauchst Du die ja nicht variable zu halten und könntest so die "CheckDatenbank" Procedure
noch einwenig kürzen...

Und, noch Fragen
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: So 08.01.06 18:29 
Das find ich voll cool, so werd ich das auch umschreiben, hab mich schon aufgeregt, das der Quellcode für das bissl so lang ist.
Aber da du mich noch nicht richtig verstanden hast: Die Procedur, die ich gepostet habe, also
procedure TForm1.Button2Click(Sender: TObject);

funktioniert, wenn ich das Programm im Delphiordner: Projedts/.. starte einwandfrei, aber sobald ich das Programm, und alle Dateien die meines Wissend dazugehören in einem Ordner auf meinem Desktop kopiere und dann starte nichtmehr, aber alle anderen Proceduren in meinem Programm tuns noch, thats the Problem!
Ja so siehts aus aber danke für Kürzugsvorschläge für den Code

Nachtrag:
Hab den Code umgeschrieben und die Procedure oben eingebunden, aber erhalte folgenden Fehler:
Unsatisfied forward or external declaration: 'TForm1.CheckDatenbank'
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Buttons, ComCtrls, FMTBcd, DB, SqlExpr,
  DBTables, OleServer, WordXP, DBClient, DBGrids, ExtCtrls, DBCtrls, Mask,
  Menus, IniFiles, XPMan, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, WinInet, jpeg, WinSock, IdFTP, IdAntiFreezeBase, IdAntiFreeze,
  ExtDlgs, printers, OleCtrls, SHDocVw;


type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    EBild: TDBEdit;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Schlieen1: TMenuItem;
    ClientDataSet1: TClientDataSet;
    DataSource1: TDataSource;
    ClientDataSet1ID: TAutoIncField;
    ClientDataSet1Sparte: TStringField;
    ClientDataSet1Bezeichnung: TStringField;
    ClientDataSet1Beschreibung: TMemoField;
    ClientDataSet1Bildname: TStringField;
    DBGrid1: TDBGrid;
    DBMemo1: TDBMemo;
    EBezeichnung: TDBEdit;
    CSparte: TDBComboBox;
    Label4: TLabel;
    Label5: TLabel;
    StatusBar1: TStatusBar;
    XPManifest1: TXPManifest;
    Bearbeiten1: TMenuItem;
    htmlDateierstellen1: TMenuItem;
    htmlDateihochladen1: TMenuItem;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    IdFTP1: TIdFTP;
    IdTCPClient1: TIdTCPClient;
    ProgressBar1: TProgressBar;
    IdAntiFreeze1: TIdAntiFreeze;
    Bilderhochladen1: TMenuItem;
    OpenPictureDialog1: TOpenPictureDialog;
    GroupBox2: TGroupBox;
    DBNavigator1: TDBNavigator;
    Vorschau1: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Schlieen1Click(Sender: TObject);
    procedure htmlDateierstellen1Click(Sender: TObject);
    procedure htmlDateihochladen1Click(Sender: TObject);
    procedure FtpVerbindung;
    procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure Bilderhochladen1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Vorschau1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    Procedure CheckDatenbank(Datei,Text1,Text2:String);      // <-- IN DIESER ZEILE ERHALTE ICH DEN FELHER
  private

    { Private declarations }
    procedure CreateParams(var Params: TCreateParams); override;
  public
    { Public declarations }

  end;
stifflersmom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194

XP /XP PRO/ SuSE div.
D1 - D7, BDS 2006
BeitragVerfasst: So 08.01.06 19:13 
Klar, wenn du die Procedure oben (zur Form) deklarierst,
dann musst Du sie auch (unten) dementsprechend benennen.

Wenn Du dir mal die Deklaratiionen (der bestehenden Proceduren)
genauer ansiehst, wirst Du schon drauf kommen.

An sonsten:

ausblenden Delphi-Quelltext
1:
Procedure Tform1.checkdatenbanken...					


Zitat:
Aber da du mich noch nicht richtig verstanden hast: Die Procedur, die ich gepostet habe, also
procedure TForm1.Button2Click(Sender: TObject);

funktioniert, wenn ich das Programm im Delphiordner: Projedts/.. starte einwandfrei, aber sobald ich das Programm, und alle Dateien die meines Wissend dazugehören in einem Ordner auf meinem Desktop kopiere und dann starte nichtmehr, aber alle anderen Proceduren in meinem Programm tuns noch, thats the Problem

Doch, habe ich.
An sich MUSS Dein Programm (wenn Du nicht DOCH irgendwo im Quelltext eine absolute Pfadangabe
hinterlegt hast) auch von einem anderen Verzeichnis aus zu starten sein.
Ich weiß auch nicht genau, ob Du nicht um Unterverzeichnis Deines Desktops
irgendwie Probleme kriegst.
Mach Doch einfach mal ein Verzeichnis in z.B. C:\Programme
schieb ALLE notwendigen Dateien da rein und versuchs noch mal von dort aus.
Wenn es denn so klappt, kannst Du Dir ja eine Verknüpfung von dem Programm auf
Deinen Desktop legen.

Moin