Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: So 09.08.09 21:33 
Hi, Delpher,
sicherlich ist der folgende Code vereinfachbar, ich weiß bloß nicht, wie:

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:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
procedure TForm1.BtSplitClick(Sender: TObject);
var mesg: array[1..10of string;
begin
 if form2.ADOTable1.TableName = 'schule' then    // ohne Pfad und Endung !
 begin
  if not fileexists(home+'\R1x.dbf'then
  with ADOTable1 do
  begin
    Active := False;
    TableName := 'R1x.dbf';
    //TableType := ttDBase;  //hier: ConnectionString;
    FieldDefs.Clear;
    FieldDefs.Add('Name',       ftString,   25, False);
    FieldDefs.Add('Vorname',    ftString,   25, False);
    FieldDefs.Add('Klasse',     ftString,    5, False);
    FieldDefs.Add('Geschlecht', ftString,    1, False);
    FieldDefs.Add('Gebdat',     ftString,   10, False); //ftDate ??
    FieldDefs.Add('Punkte',     ftinteger);
    Active := true;
    with form2.ADOTable1 do
    begin     // showmessage(inttostr(form2.ADOTable1.recordcount));
      first;
      while not eof do
      begin
        if fieldbyname('KLASSE').asstring[1] = '1' then
        begin
          ADOtable1.Active := true;
          ADOtable1.append;
            ADOTable1.fieldbyname('NAME').asstring :=       fieldbyname('NAME').asstring;
            ADOTable1.fieldbyname('VORNAME').asstring :=    fieldbyname('VORNAME').asstring;
            ADOTable1.fieldbyname('KLASSE').asstring :=     fieldbyname('KLASSE').asstring;
            ADOTable1.fieldbyname('GESCHLECHT').asstring := fieldbyname('Geschlecht').asstring;
            ADOTable1.fieldbyname('GEBDAT').asstring :=     fieldbyname('gebdat').asstring;
            ADOTable1.fieldbyname('PUNKTE').asinteger :=    fieldbyname('punkte').asinteger;
          ADOtable1.Post;
        end;
        next;
      end;
    end;
    mesg[1] := ADOTable1.TableName+ ' wurde erzeugt ';
  end
  else
  begin
    with ADOTable1 do
    begin
      Active := False;  //DatabaseName := '';
        TableName := 'R1x.dbf';
      Active := true;
    end;
    mesg[1] := ADOTable1.TableName+ ' wurde geladen ';
  end;

  if not fileexists(home+'\R7x.dbf'then
  with ADOTable3 do
  begin
    Active := False;  //DatabaseName := '';
    TableName := 'R7x.dbf';
    FieldDefs.Clear;
    FieldDefs.Add('Name',       ftString,   25, False);
    FieldDefs.Add('Vorname',    ftString,   25, False);
    FieldDefs.Add('Klasse',     ftString,    5, False);
    FieldDefs.Add('Geschlecht', ftString,    1, False);
    FieldDefs.Add('Gebdat',     ftString,   10, False); //ftDate ??
    FieldDefs.Add('Punkte',     ftinteger);
    Active := true;
    with form2.ADOTable1 do
    begin     // showmessage(inttostr(form2.ADOTable1.recordcount));
      first;
      while not eof do
      begin
        if fieldbyname('KLASSE').asstring[1] = '7' then
        begin
          ADOtable3.Active := true;
          ADOtable3.append;
            ADOTable3.fieldbyname('NAME').asstring :=       fieldbyname('NAME').asstring;
            ADOTable3.fieldbyname('VORNAME').asstring :=    fieldbyname('VORNAME').asstring;
            ADOTable3.fieldbyname('KLASSE').asstring :=     fieldbyname('KLASSE').asstring;
            ADOTable3.fieldbyname('GESCHLECHT').asstring := fieldbyname('Geschlecht').asstring;
            ADOTable3.fieldbyname('GEBDAT').asstring :=     fieldbyname('gebdat').asstring;
            ADOTable3.fieldbyname('PUNKTE').asinteger :=    fieldbyname('punkte').asinteger;
          ADOtable3.Post;
        end;
        next;
      end;
    end;
    mesg[2] := ADOTable3.TableName+ ' wurde erzeugt ';
  end
  else
  begin
    with ADOTable3 do
    begin
      Active := False;  //DatabaseName := '';
        TableName := 'R7x.dbf';
      Active := true;
    end;
    mesg[2] := ADOTable3.TableName+ ' wurde geladen ';
  end;

  if not fileexists(home+'\R8x.dbf'then
  with ADOTable4 do
  begin
    Active := False;  //DatabaseName := '';
    TableName := 'R8x.dbf';
    FieldDefs.Clear;
    FieldDefs.Add('Name',       ftString,   25, False);
    FieldDefs.Add('Vorname',    ftString,   25, False);
    FieldDefs.Add('Klasse',     ftString,    5, False);
    FieldDefs.Add('Geschlecht', ftString,    1, False);
    FieldDefs.Add('Gebdat',     ftString,   10, False); //ftDate ??
    FieldDefs.Add('Punkte',     ftinteger);
    Active := true;
    with form2.ADOTable1 do
    begin    //  showmessage(inttostr(form2.ADOTable1.recordcount));
      first;
      while not eof do
      begin
        if fieldbyname('KLASSE').asstring[1] = '8' then
        begin
          ADOtable4.Active := true;
          ADOtable4.append;
            ADOTable4.fieldbyname('NAME').asstring :=       fieldbyname('NAME').asstring;
            ADOTable4.fieldbyname('VORNAME').asstring :=    fieldbyname('VORNAME').asstring;
            ADOTable4.fieldbyname('KLASSE').asstring :=     fieldbyname('KLASSE').asstring;
            ADOTable4.fieldbyname('GESCHLECHT').asstring := fieldbyname('Geschlecht').asstring;
            ADOTable4.fieldbyname('GEBDAT').asstring :=     fieldbyname('gebdat').asstring;
            ADOTable4.fieldbyname('PUNKTE').asinteger :=    fieldbyname('punkte').asinteger;
          ADOtable4.Post;
        end;
        next;
      end;
    end;
    mesg[3] := ADOTable4.TableName+ ' wurde erzeugt ';
  end
  else
  begin
    with ADOTable4 do
    begin
      Active := False;  //DatabaseName := '';
        TableName := 'R8x.dbf';
      Active := true;
    end;
    mesg[3] := ADOTable4.TableName+ ' wurde geladen ';
  end;

  if not fileexists(home+'\R9x.dbf'then
  with ADOTable5 do
  begin
    Active := False;  //DatabaseName := '';
    TableName := 'R9x.dbf';
    FieldDefs.Clear;
    FieldDefs.Add('Name',       ftString,   25, False);
    FieldDefs.Add('Vorname',    ftString,   25, False);
    FieldDefs.Add('Klasse',     ftString,    5, False);
    FieldDefs.Add('Geschlecht', ftString,    1, False);
    FieldDefs.Add('Gebdat',     ftString,   10, False); //ftDate ??
    FieldDefs.Add('Punkte',     ftinteger);
    Active := true;
    with form2.ADOTable1 do
    begin     // showmessage(inttostr(form2.ADOTable1.recordcount));
      first;
      while not eof do
      begin
        if fieldbyname('KLASSE').asstring[1] = '9' then
        begin
          ADOtable5.Active := true;
          ADOtable5.append;
            ADOTable5.fieldbyname('NAME').asstring :=       fieldbyname('NAME').asstring;
            ADOTable5.fieldbyname('VORNAME').asstring :=    fieldbyname('VORNAME').asstring;
            ADOTable5.fieldbyname('KLASSE').asstring :=     fieldbyname('KLASSE').asstring;
            ADOTable5.fieldbyname('GESCHLECHT').asstring := fieldbyname('Geschlecht').asstring;
            ADOTable5.fieldbyname('GEBDAT').asstring :=     fieldbyname('gebdat').asstring;
            ADOTable5.fieldbyname('PUNKTE').asinteger :=    fieldbyname('punkte').asinteger;
          ADOtable5.Post;
        end;
        next;
      end;
    end;
    mesg[4] := ADOTable5.TableName+ ' wurde erzeugt ';
  end
  else
  begin
    with ADOTable5 do
    begin
      Active := False;  //DatabaseName := '';
        TableName := 'R9x.dbf';
      Active := true;
    end;
    mesg[4] := ADOTable5.TableName+ ' wurde geladen ';
  end;

  if not fileexists(home+'\R5x.dbf'then
  with ADOTable6 do
  begin
    Active := False;  //DatabaseName := '';
    TableName := 'R5x.dbf';
    FieldDefs.Clear;
    FieldDefs.Add('Name',       ftString,   25, False);
    FieldDefs.Add('Vorname',    ftString,   25, False);
    FieldDefs.Add('Klasse',     ftString,    5, False);
    FieldDefs.Add('Geschlecht', ftString,    1, False);
    FieldDefs.Add('Gebdat',     ftString,   10, False); //ftDate ??
    FieldDefs.Add('Punkte',     ftinteger);
    Active := true;
    with form2.ADOTable1 do
    begin     // showmessage(inttostr(form2.ADOTable1.recordcount));
      first;
      while not eof do
      begin
        if fieldbyname('KLASSE').asstring[1] = '5' then
        begin
          ADOtable6.Active := true;
          ADOtable6.append;
            ADOTable6.fieldbyname('NAME').asstring :=       fieldbyname('NAME').asstring;
            ADOTable6.fieldbyname('VORNAME').asstring :=    fieldbyname('VORNAME').asstring;
            ADOTable6.fieldbyname('KLASSE').asstring :=     fieldbyname('KLASSE').asstring;
            ADOTable6.fieldbyname('GESCHLECHT').asstring := fieldbyname('Geschlecht').asstring;
            ADOTable6.fieldbyname('GEBDAT').asstring :=     fieldbyname('gebdat').asstring;
            ADOTable6.fieldbyname('PUNKTE').asinteger :=    fieldbyname('punkte').asinteger;
          ADOtable6.Post;
        end;
        next;
      end;
    end;
    mesg[5] := ADOTable6.TableName+ ' wurde erzeugt ';
  end
  else
  begin
    with ADOTable6 do
    begin
      Active := False;  //DatabaseName := '';
        TableName := 'R5x.dbf';
      Active := true;
    end;
    mesg[5] := ADOTable6.TableName+ ' wurde geladen ';
  end;

  if not fileexists(home+'\R6x.dbf'then
  with ADOTable7 do
  begin
    Active := False;  //DatabaseName := '';
      TableName := 'R6x.dbf';
      FieldDefs.Clear;
      FieldDefs.Add('Name',       ftString,   25, False);
      FieldDefs.Add('Vorname',    ftString,   25, False);
      FieldDefs.Add('Klasse',     ftString,    5, False);
      FieldDefs.Add('Geschlecht', ftString,    1, False);
      FieldDefs.Add('Gebdat',     ftString,   10, False); //ftDate ??
      FieldDefs.Add('Punkte',     ftinteger);
    Active := true;
    with form2.ADOTable1 do
    begin     // showmessage(inttostr(form2.ADOTable1.recordcount));
      first;
      while not eof do
      begin
        if fieldbyname('KLASSE').asstring[1] = '6' then
        begin
          ADOtable7.Active := true;
          ADOtable7.append;
            ADOTable7.fieldbyname('NAME').asstring :=       fieldbyname('NAME').asstring;
            ADOTable7.fieldbyname('VORNAME').asstring :=    fieldbyname('VORNAME').asstring;
            ADOTable7.fieldbyname('KLASSE').asstring :=     fieldbyname('KLASSE').asstring;
            ADOTable7.fieldbyname('GESCHLECHT').asstring := fieldbyname('Geschlecht').asstring;
            ADOTable7.fieldbyname('GEBDAT').asstring :=     fieldbyname('gebdat').asstring;
            ADOTable7.fieldbyname('PUNKTE').asinteger :=    fieldbyname('punkte').asinteger;
          ADOtable7.Post;
        end;
        next;
      end;
    end;
    mesg[6] := ADOTable7.TableName+ ' wurde erzeugt ';
  end
  else
  begin
    with ADOTable7 do
    begin
      Active := False;  //DatabaseName := '';
        TableName := 'R6x.dbf';
      Active := true;
    end;
    mesg[6] := ADOTable7.TableName+ ' wurde geladen ';
  end;

  if not fileexists(home+'\RDx.dbf'then
  with ADOTable8 do
  begin
    Active := False;  //DatabaseName := '';
    TableName := 'RDx.dbf';
    FieldDefs.Clear;
    FieldDefs.Add('Name',       ftString,   25, False);
    FieldDefs.Add('Vorname',    ftString,   25, False);
    FieldDefs.Add('Klasse',     ftString,    5, False);
    FieldDefs.Add('Geschlecht', ftString,    1, False);
    FieldDefs.Add('Gebdat',     ftString,   10, False); //ftDate ??
    FieldDefs.Add('Punkte',     ftinteger);
    Active := true;
    with form2.ADOTable1 do
    begin     // showmessage(inttostr(form2.ADOTable1.recordcount));
      first;
      while not eof do
      begin
        if fieldbyname('KLASSE').asstring[1] = 'D' then
        begin
          ADOtable8.Active := true;
          ADOtable8.append;
            ADOTable8.fieldbyname('NAME').asstring :=       fieldbyname('NAME').asstring;
            ADOTable8.fieldbyname('VORNAME').asstring :=    fieldbyname('VORNAME').asstring;
            ADOTable8.fieldbyname('KLASSE').asstring :=     fieldbyname('KLASSE').asstring;
            ADOTable8.fieldbyname('GESCHLECHT').asstring := fieldbyname('Geschlecht').asstring;
            ADOTable8.fieldbyname('GEBDAT').asstring :=     fieldbyname('gebdat').asstring;
            ADOTable8.fieldbyname('PUNKTE').asinteger :=    fieldbyname('punkte').asinteger;
          ADOtable8.Post;
        end;
        next;
      end;
    end;
    mesg[7] := ADOTable8.TableName+ ' wurde erzeugt ';
  end
  else
  begin
    with ADOTable8 do
    begin
      Active := False;  //DatabaseName := '';
        TableName := 'RDx.dbf';
      Active := true;
    end;
    mesg[7] := ADOTable8.TableName+ ' wurde geladen ';
  end;

  showmessage('Klassenstufentabellen sind erzeugt / geladen' +#13+#13+
                mesg[1] + ' = '+ inttostr(ADOtable1.recordcount)+ #13+
                mesg[2] + ' = '+ inttostr(ADOtable3.recordcount)+ #13+
                mesg[3] + ' = '+ inttostr(ADOtable4.recordcount)+ #13+
                mesg[4] + ' = '+ inttostr(ADOtable5.recordcount)+ #13+
                mesg[5] + ' = '+ inttostr(ADOtable6.recordcount)+ #13+
                mesg[6] + ' = '+ inttostr(ADOtable7.recordcount)+ #13+
                mesg[7] + ' = '+ inttostr(ADOtable8.recordcount));
 end
 else showmessage('Datei schule.dbf muss geladen werden');
end;


Ich hoffe, ihr seid nicht zu erschrocken und habt eine Lösung (-sidee),
Gruß, Detlef

_________________
ut vires desint, tamen est laudanda voluntas
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: So 09.08.09 21:38 
Du könntest vielleicht noch in eigenen Worten beschreiben, was du da machst.

Edit: Übrigens solltest du bei solchen Konstrukten das "with" unbedingt vermeiden - kann sosnt zu miesen Probleme führen, wenn man nicht mehr genau blickt, welches with denn nun gültig ist.

_________________
PROGRAMMER: A device for converting coffee into software.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: So 09.08.09 21:53 
Hi, Xentar,

danke erstmal für den with-Tipp.

Nun, eine SchülergesamtTabelle soll in einzelne Tabellen für die jeweiligen Klassenstufen aufgespalten werden - wenn es diese Klassenstufentabelle schon gibt, wird sie aktiviert, sonst wird sie erzeugt. - Mehr ist es eigentlich nicht.

Der Vorgang ist also 7 mal der selbe, bisher habe ich dafür auch sieben ADOTables - wahrscheinlich reicht einer - ich weiß bloß nicht, wie.

Ok erstmal?

_________________
ut vires desint, tamen est laudanda voluntas
FaTaLGuiLLoTiNe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 5

Windows 7, Windows 8.1
Delphi XE
BeitragVerfasst: So 09.08.09 22:15 
user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
eine SchülergesamtTabelle soll in einzelne Tabellen für die jeweiligen Klassenstufen aufgespalten werden


Das hört sich irgendwie nicht nach einem vernünftigen Datenbankkonzept an.

Imho wäre es besser, eine Tabelle 'Schüler' zu haben, eine Tabelle 'Klassenstufe' und dann eine Tabelle, in der die m:n - Beziehung zwischen Schüler und Klassenstufe realisiert ist.

_________________
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Mo 10.08.09 07:38 
user profile iconFaTaLGuiLLoTiNe hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
eine SchülergesamtTabelle soll in einzelne Tabellen für die jeweiligen Klassenstufen aufgespalten werden


Das hört sich irgendwie nicht nach einem vernünftigen Datenbankkonzept an.

Imho wäre es besser, eine Tabelle 'Schüler' zu haben, eine Tabelle 'Klassenstufe' und dann eine Tabelle, in der die m:n - Beziehung zwischen Schüler und Klassenstufe realisiert ist.


Es gibt durchaus Gruende, weshalb das Aufspalten einer grossen Tabelle in mehrere kleine sinnvoll sein kann, z.B. Dateigroesse, Performance oder Datenschutz. Letzeres beispielsweise um den Lehrern einer Klassenstufe nur die Namen und Adressen ihrer Schueler zur Verfuegung zu stellen, ohne dabei eine teuere serverbasierte Loesung zu benutzen, die entsprechende Zugriffsrechte bietet.

Ob diese Gruende hier zutreffen, kann nur der OP beantworten.

twm
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 10.08.09 07:54 
Zudem solltest du endlich mal unsere Rat zum Wechsel des DBMS und damit auch den Sprung zu SQL in Betracht ziehen ( du hast dich zwar von der BDE befreit, das ändert aber überhaupt nichts an der Tastache das dBase alles andere als zeitgemäss ist)

_________________
Markus Kinzler.
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Mo 10.08.09 07:58 
Hi,

ungefaehr so:

(da sind definitiv noch Fehler drin!)

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:
procedure ErzeugeKlassentabelle(_Nr: integer; _Klasse: string; adt: TAdoTable);
var
  tblname: string;
  src: TAdoTable;
begin
  tblname := 'R' + _Klasse + 'x.dbf';
  if fileexists(home+'\' + tblname) then begin
    adt.Active := False;  //DatabaseName := '';
    adt.TableName := tblname;
    adt.Active := true;
    mesg[_Nr] := tblname + ' wurde geladen ';
    exit;
  end;
  
  adt.Active := False;
  adt.TableName := tblname;
  //adt.TableType := ttDBase;  //hier: ConnectionString;
  adt.FieldDefs.Clear;
  adt.FieldDefs.Add('Name',       ftString,   25, False);
  adt.FieldDefs.Add('Vorname',    ftString,   25, False);
  adt.FieldDefs.Add('Klasse',     ftString,    5, False);
  adt.FieldDefs.Add('Geschlecht', ftString,    1, False);
  adt.FieldDefs.Add('Gebdat',     ftString,   10, False); //ftDate ??
  adt.FieldDefs.Add('Punkte',     ftinteger);
  adt.Active := true;

  src.first;
  while not src.eof do begin
    if src.fieldbyname('KLASSE').asstring[1] = _Klasse then begin
      adt.Active := true;
      adt.append;
      adt.fieldbyname('NAME').asstring :=       src.fieldbyname('NAME').asstring;
      adt.fieldbyname('VORNAME').asstring :=    src.fieldbyname('VORNAME').asstring;
      adt.fieldbyname('KLASSE').asstring :=     src.fieldbyname('KLASSE').asstring;
      adt.fieldbyname('GESCHLECHT').asstring := src.fieldbyname('Geschlecht').asstring;
      adt.fieldbyname('GEBDAT').asstring :=     src.fieldbyname('gebdat').asstring;
      adt.fieldbyname('PUNKTE').asinteger :=    src.fieldbyname('punkte').asinteger;
      adt.Post;
    end;
    src.next;
  end;
  mesg[_Nr] := tblname+ ' wurde erzeugt ';
end;

procedure TForm1.BtSplitClick(Sender: TObject);
var mesg: array[1..10of string;
begin
 if form2.ADOTable1.TableName = 'schule' then    // ohne Pfad und Endung !
 begin
  LadeOderErzeugeKlassentabelle(1'1', AdoTable1);
  LadeOderErzeugeKlassentabelle(2'7', AdoTable3);
  // usw.  
  showmessage('Klassenstufentabellen sind erzeugt / geladen' +#13+#13+
                mesg[1] + ' = '+ inttostr(ADOtable1.recordcount)+ #13+
                mesg[2] + ' = '+ inttostr(ADOtable3.recordcount)+ #13+
                mesg[3] + ' = '+ inttostr(ADOtable4.recordcount)+ #13+
                mesg[4] + ' = '+ inttostr(ADOtable5.recordcount)+ #13+
                mesg[5] + ' = '+ inttostr(ADOtable6.recordcount)+ #13+
                mesg[6] + ' = '+ inttostr(ADOtable7.recordcount)+ #13+
                mesg[7] + ' = '+ inttostr(ADOtable8.recordcount));
 end
 else showmessage('Datei schule.dbf muss geladen werden');
end;


Zitat:

Ich hoffe, ihr seid nicht zu erschrocken und habt eine Lösung (-sidee)


Das Ganze ist nicht gerade effizient, aber es sollte funktionieren.
Und, wie schon FaTaLGuiLLoTiNe schreibt: Wenn es nur darum geht, die Schueler nach Klassenstufe darzustellen, solltest Du ueber ein anderes Datenbankdesign und Queries nachdenken.

twm
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mo 10.08.09 08:05 
Hi,

dummzeuch hat recht - Datenschutz ist genau der Grund, die Tabelle schule.dbf hat sogar noch viele weitere Felder.
Bei den Bundesjugendspielen sollen Schüler die einzelnen Klassenstufen eingeben. Diese Tabellen werden dann von mir gemergt und insgesamt ausgewertet.

Detlef

ich vermute mal, ich kann den folgenden Code verwenden:

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 TForm1.CopyTables (aTblName : String; aSrc, aDst : TADOTable; aFieldnames : String);
Var  srcFields, dstFields : Array Of TField;
     i                    : Smallint;
     slFieldNames         : TStringList;
Begin
  aSrc.Close;
    aSrc.TableName := aTblName;
  aSrc.active := true;
  slFieldNames := CreateStringListFromCommaString(aFieldNames);
  Try
    setLength(srcFields, slFieldNames.Count);
    setLength(dstFields, slFieldNames.Count);
    For i := 0 to slFieldNames.Count - 1 do
    begin
      srcFields[i] := aSrc.FieldByname(slFieldnames[i]);
      dstFields[i] := aDst.FieldByname(slFieldnames[i]);
    End;
    aSrc.First;
    while not aSrc.Eof do
    Begin
      aDst.Append;
      For i := 0 to slFieldNames.Count - 1 do
        DstFields[i].Value := SrcFields[i].Value;
      aDst.Post;
      aSrc.Next;
    End;
    showmessage('merge '+ aSrc.TableName + ' ok');
  Finally
    slFieldNames.Free;
  End;
End;


und dann muss ich diesen abwandeln, aber wie:

ausblenden Delphi-Quelltext
1:
  CopyTables ('R1x.dbf',ADOtable1, form2.ADOTable3, 'Name,Vorname,Klasse,Geschlecht,GebDat,Punkte');					


Na, wird sich schon finden,
Detlef

_________________
ut vires desint, tamen est laudanda voluntas
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mo 10.08.09 08:07 
Oh, jetzt haben sich zwei Antworten mit meinem Beitrag zeitlich überschnitten.

_________________
ut vires desint, tamen est laudanda voluntas
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mo 10.08.09 08:55 
Hi, Markus,
nun, die DBF-Table schule.dbf (mit FoxPro 2.6-Treiber) bekomme ich so ja von der Schule, da kann ich nichts machen.
Detlef

_________________
ut vires desint, tamen est laudanda voluntas
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Di 11.08.09 21:59 
Hi, Delpher,

so, wie immer zum Schluss die bzw. eine Lösung:

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:
Procedure TForm1.CopyTables_S (aTblName, aTbSName : String; aSrc, aDst : TADOTable; Kx : string);
Var  i : Smallint;
Begin
  aSrc.Close;
    aSrc.TableName := aTblName;
  aSrc.active := true;
  aDst.Close;
    aDst.TableName := aTbSName;
  aDst.Active := true;
  aSrc.First;
  while not aSrc.Eof do
  Begin                 // form2.adotable1, 5,6,7,8,9,1 form2.listbox1.items[..]
    if aSrc.FieldByName('KLASSE').asstring[1] = Kx then
    begin
      aDst.Append;      //   adotable1
      For i := 0 to aSrc.FieldCount - 1 do
        aDst.Fields[i].Value := aSrc.Fields[i].Value;
      aDst.Post;
    end;
    aSrc.Next;
  End;
  showmessage('split '+ aDst.TableName + ' ok');
End;

procedure TForm1.BtSplitClick(Sender: TObject);
var tn, ts  : string;
      q     : TADOQuery;
begin
  showmessage(form2.ADOTable1.TableName);
  if form2.ADOTable1.TableName = 'schule' then    // ohne Pfad und Endung !
  begin
    form2.listbox1.itemindex := 0;       // home+'\R1x.dbf'
    repeat
      tn := home+ '\' + 'R'+form2.listbox1.items[form2.listbox1.itemindex][1]+'x.dbf';
      ts := 'R'+form2.listbox1.items[form2.listbox1.itemindex][1]+'x';
      showmessage(tn+ '  '+ ts);

      if not fileexists(tn) then
      begin
        q := TADOQuery.Create(nil);
        q.Connection := DaMod1.ADOConnection1;
        q.Close;
        q.SQL.Clear;
        q.SQL.Add('Create Table '+
                    'R'+form2.listbox1.items[form2.listbox1.itemindex][1]+'x.dbf' +
                    ' (Name Char(25), Vorname Char(25), Klasse Char(5), Geschlecht Char(1), ' +
                    ' Gebdat Char(10), Punkte Integer);');
        q.Prepared := True;
        try
          q.ExecSQL;
        except
        end;
        q.Free;
        showmessage('Tabelle '+ tn+ ' wurde erzeugt');

        CopyTables_S (form2.ADOTable1.TableName, ts, form2.ADOTable1, ADOTable1,
                      form2.listbox1.items[form2.listbox1.itemindex][1]);
        showmessage(tn+ ' wurde gefüllt');
      end
      else showmessage(tn+' existiert');
      form2.listbox1.itemindex := form2.listbox1.itemindex + 1;
    until form2.listbox1.itemindex = form2.listbox1.items.count-1;
    showmessage('Split-Dateien sind vorhanden');
  end
  else showmessage('schule.dbf muss geladen sein');
end;


Jetzt ist mir auch klar, wie man mit ADO eine (leere) Tabelle anlegt.

Bis denne,
Detlef

_________________
ut vires desint, tamen est laudanda voluntas