Autor |
Beitrag |
D. Annies
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: So 09.08.09 21:33
Hi, Delpher,
sicherlich ist der folgende Code vereinfachbar, ich weiß bloß nicht, wie:
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..10] of string; begin if form2.ADOTable1.TableName = 'schule' then begin if not fileexists(home+'\R1x.dbf') then with ADOTable1 do begin Active := False; TableName := 'R1x.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); FieldDefs.Add('Punkte', ftinteger); Active := true; with form2.ADOTable1 do begin 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; 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; 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); FieldDefs.Add('Punkte', ftinteger); Active := true; with form2.ADOTable1 do begin 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; 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; 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); FieldDefs.Add('Punkte', ftinteger); Active := true; with form2.ADOTable1 do begin 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; 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; 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); FieldDefs.Add('Punkte', ftinteger); Active := true; with form2.ADOTable1 do begin 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; 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; 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); FieldDefs.Add('Punkte', ftinteger); Active := true; with form2.ADOTable1 do begin 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; 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; 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); FieldDefs.Add('Punkte', ftinteger); Active := true; with form2.ADOTable1 do begin 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; 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; 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); FieldDefs.Add('Punkte', ftinteger); Active := true; with form2.ADOTable1 do begin 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; 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
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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
Beiträge: 200
Erhaltene Danke: 5
Windows 7, Windows 8.1
Delphi XE
|
Verfasst: So 09.08.09 22:15
D. Annies hat folgendes geschrieben : | 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
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Mo 10.08.09 07:38
FaTaLGuiLLoTiNe hat folgendes geschrieben : | D. Annies hat folgendes geschrieben : | 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
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: 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
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Mo 10.08.09 07:58
Hi,
ungefaehr so:
(da sind definitiv noch Fehler drin!)
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; adt.TableName := tblname; adt.Active := true; mesg[_Nr] := tblname + ' wurde geladen '; exit; end; adt.Active := False; adt.TableName := tblname; 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); 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..10] of string; begin if form2.ADOTable1.TableName = 'schule' then begin LadeOderErzeugeKlassentabelle(1, '1', AdoTable1); LadeOderErzeugeKlassentabelle(2, '7', AdoTable3); 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
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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:
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:
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
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Di 11.08.09 21:59
Hi, Delpher,
so, wie immer zum Schluss die bzw. eine Lösung:
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 if aSrc.FieldByName('KLASSE').asstring[1] = Kx then begin aDst.Append; 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 begin form2.listbox1.itemindex := 0; 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
|
|
|