| Autor |
Beitrag |
delphi_noop
Hält's aus hier
Beiträge: 15
Win XP
Delphi 7
|
Verfasst: 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
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: 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:
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
      
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
|
Verfasst: So 31.05.09 11:12
Hallo!
Ich würde es in etwa so probieren und mich nicht
auf GUI-Elemente verlassen, wie es ffgorcky vorgeschlagen hatte.
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;
table1.First;
while not table1.Eof do begin if table1.Fields[0].AsString = '' then if table1.Fields[0].IsNull then if table1.FieldByName('Feldname').AsString = '' then begin table1.Edit; table1.FieldByName('Feldname').AsString := 'Wert'; table1.Post; end; end;
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 
Hält's aus hier
Beiträge: 15
Win XP
Delphi 7
|
Verfasst: 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!!!! 
|
|
arj
      
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
|
Verfasst: So 31.05.09 11:37
Hi delphi_noop
mit dem Beitrag von ffgorcky 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 
Hält's aus hier
Beiträge: 15
Win XP
Delphi 7
|
Verfasst: 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
      
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
|
Verfasst: So 31.05.09 11:46
arj hat folgendes geschrieben: | ... dann post mal (den relevanten) Teil
deines Codes... |
|
|
delphi_noop 
Hält's aus hier
Beiträge: 15
Win XP
Delphi 7
|
Verfasst: 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
      
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
|
Verfasst: So 31.05.09 12:07
Was meinst Du denn warum ich das da oben geschrieben hab, mit dem relevanten Teil?
Das hier wäre der relevante Code gewesene:
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;
table1.First;
while not table1.Eof do begin if table1.Fields[0].AsString = '' then if table1.FieldByName('Tätigkeit').AsString = '' then begin table1.Edit; table1.FieldByName('Tätigkeit').AsString := edit1.text; table1.Post; end; end;
table1.first ; dbgrid1.refresh; Application.ProcessMessages; end; |
delphi_noop hat folgendes geschrieben : | | 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
|
Verfasst: So 31.05.09 12:23
Wie wäre es denn mit einer Query?
SQL-Anweisung 1:
| UPDATE Tabelle SET Feld = Wert WHERE Feld IS NULL |
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: So 31.05.09 12:34
Ich würde auch sagen, dass Du das von DeddyH 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:
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?:
Delphi-Quelltext 1:
| if table1.FieldByName('Tätigkeit')=DBNull then |
Das könnte auch sein...
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
|
|