Autor Beitrag
delphi_noop
Hält's aus hier
Beiträge: 15

Win XP
Delphi 7
BeitragVerfasst: Sa 30.05.09 17:36 
Hallo zusammen!

Würde gerne per Knopfdruck eine Tabelle durchsuchen und falls in einer bestimmten Zelle noch kein Eintrag existiert einen einfügen!!!

Wie mach ich das am besten?
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 31.05.09 08:53 
Da ist die Frage, ob Du das mit einem DBGrid machen könntest,
dann würde das doch (meiner in dem Gebiet nicht so bewanderen Ansicht nach) so gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
for i:=0 to DBGrid1.Lines.Count-1 do
   for j:=0 to DBGrid1.Cols.Count-1 do
     if DBGrid.Cells[i,j]='' then
        DBGrid.Cells[i,j]:='HierDeinEintrag';

Damit würde er dann alle leeren Zellen innerhalb des maximalen Umfangs (also des letzen Zeilen- und letzten Spalten-Eintags) mit dem Eintrag 'HierDeinEintrag' - oder was auch immer Du dahin schreibst - versehen.


Zuletzt bearbeitet von ffgorcky am So 31.05.09 12:24, insgesamt 2-mal bearbeitet
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: So 31.05.09 11:12 
Hallo!

Ich würde es in etwa so probieren und mich nicht
auf GUI-Elemente verlassen, wie es user profile iconffgorcky vorgeschlagen hatte.

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:
procedure FillEmptyFields;
var oldpos : Integer;
begin
  oldpos := Table1.RecNo;

  // erster Datensatz selektieren
  table1.First;

  // Alle Datensätze iterieren
  while not table1.Eof do
  begin
    // Felder prüfen
    if table1.Fields[0].AsString = '' then
    // Oder
    if table1.Fields[0].IsNull then
    // Oder
    if table1.FieldByName('Feldname').AsString = '' then
    begin
      // In Editiermodus schalten
      table1.Edit;
      // irgendwie halt füllen
      table1.FieldByName('Feldname').AsString := 'Wert';
      // Abspeichern
      table1.Post;
    end;
  end;

  // Das könnte schief gehen, wenn du Felder hinzufügst/löschst.
  // Deshalb ggf. weglassen und stattdessen ein table1.First;
  table1.RecNo := oldpos;
end;


Das solltest Du gegebenenfalls in einen anderen Thread auslagern,
oder ein Application.ProcessMessages einfügen, sonst
hängt deine Applikation wenn das viele Datensätze sind.

Grüße
arj
delphi_noop Threadstarter
Hält's aus hier
Beiträge: 15

Win XP
Delphi 7
BeitragVerfasst: So 31.05.09 11:33 
Danke für eure Tipps, aber irgendwie klappt das nicht so ganz... :(

Außerdem möchte ich gerne nicht alle Zellen durchsuchen, sondern nur eine bestimmte Anzahl an Zellen (z.B. von Zeile 3 bis Zeile 5) und in diese dann, falls sie noch leer sind, den Text von Edit1 eintragen!!!

Vielleicht kann mir jemand hierbei behilflich sein!!! DANKE!!!! 8)
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: So 31.05.09 11:37 
Hi user profile icondelphi_noop

mit dem Beitrag von user profile iconffgorcky oder mit meinem solltest Du
ne Lösung basteln können, die das tut.
Versuch einfach mal :-)

Wenns partout nicht klappen will, dann post mal (den relevanten) Teil
deines Codes dann schauen wir uns dass mal an. :-)
delphi_noop Threadstarter
Hält's aus hier
Beiträge: 15

Win XP
Delphi 7
BeitragVerfasst: So 31.05.09 11:39 
Hab's nochmal probiert, aber es hat wieder nicht funktioniert!

Im Anhang findet ihr mein gesamtes Programm...
Einloggen, um Attachments anzusehen!
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: So 31.05.09 11:46 
user profile iconarj hat folgendes geschrieben:
... dann post mal (den relevanten) Teil
deines Codes...
delphi_noop Threadstarter
Hält's aus hier
Beiträge: 15

Win XP
Delphi 7
BeitragVerfasst: So 31.05.09 11:48 
Hallo!

In dem Programm gibt es nur ein Dbgrid mit der Tabelle und einen button zum Einfügen, also bitte einfach runterladen!!!
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: So 31.05.09 12:07 
Was meinst Du denn warum ich das da oben geschrieben hab, mit dem relevanten Teil? :evil:

Das hier wäre der relevante Code gewesene:
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:
procedure TForm1.Button1Click(Sender: TObject);
var oldpos : Integer;
begin
  oldpos := Table1.RecNo;

  // erster Datensatz selektieren
  table1.First;

  // Alle Datensätze iterieren
  while not table1.Eof do
  begin
    // Felder prüfen
    if table1.Fields[0].AsString = '' then
    // Oder
    //if table1.Fields[0].IsNull then
    // Oder
    if table1.FieldByName('Tätigkeit').AsString = '' then
    begin
      // In Editiermodus schalten
      table1.Edit;
      // irgendwie halt füllen
      table1.FieldByName('Tätigkeit').AsString := edit1.text;
      // Abspeichern
      table1.Post;
    end;
  end;

  // Das könnte schief gehen, wenn du Felder hinzufügst/löschst.
  // Deshalb ggf. weglassen und stattdessen ein table1.First;
  table1.first        ;
  dbgrid1.refresh;
  Application.ProcessMessages;
end;


user profile icondelphi_noop hat folgendes geschrieben Zum zitierten Posting springen:
Hab's nochmal probiert, aber es hat wieder nicht funktioniert!

Was genau ging denn nicht? Hat es nicht kompiliert? Was hat das Programm stattdessen gemacht?
Was genau möchtest Du denn jetzt Ändern an Deinen Feldern?

Gib mal bitte noch ein paar Infos!
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 31.05.09 12:23 
Wie wäre es denn mit einer Query?
ausblenden SQL-Anweisung
1:
UPDATE Tabelle SET Feld = Wert WHERE Feld IS NULL					
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 31.05.09 12:34 
Ich würde auch sagen, dass Du das von user profile iconDeddyH vorgeschlagene erst mal machen solltest
- wobei ich statt Wert einfach einen Leerstring (also nur '') reinsetzen würde - es sei denn, Du möchtest später mal
unterscheiden, ob dieses Feld denn schon einen Wert zugewiesen bekommen hat, oder nicht.

Dann würde ich das eher so schreiben:
ausblenden Delphi-Quelltext
1:
if table1.FieldByName('Tätigkeit')=null then					

In der Hoffnung, dass ich da jetzt keinen Denkfehler drin habe, da ich mich mit dem SQL-Server schon länger nicht mehr beschäftigt habe. - Oder war das in dem Fall dann so?:
ausblenden Delphi-Quelltext
1:
if table1.FieldByName('Tätigkeit')=DBNull then					

Das könnte auch sein...
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 31.05.09 12:38 
Es geht ja wohl darum, nachträglich einen Standardwert einzusetzen, das kann ein Leerstring oder auch etwas anderes sein (wobei ich nicht weiß, wie Paradox sich bei Leerstrings verhält). Und IIRC prüft man NULL mit IsNull ab, sicher bin da aber gerade nicht.