Seite 4 von 6

Verfasst: 24.06.2009 08:14
von dysti
Nun ja,
ich bin mir da nicht ganz sicher, ob gedanklich @Purebasic09 tatsächlich ein Array vorgesehen hat, auch wenn es hier augenscheinlich sich hier so darstellt.
Auf jeden Fall klappt es so nicht. Hier stimmt der Programmierfluß vorn und hinten nicht.

@Kurzer, leider hast du wirlich zu kurz gedacht.
Wie soll das mit dem vordefinierten Array weiterlaufen?
In @Purebasic09 seiner Datenbasis besteht ein Artikel aus mehreren Einzelteilen. Er deutet das auch hierdurch an:

Code: Alles auswählen

Case  4 To 4000 
Das läuft ja auf eine Schleife hinaus.
Ein Array würde ich dann nicht nehmen, eher eine Linked List.

Das würde dann so aussehen:

Code: Alles auswählen

NewList teil.s()   
arbeitsver.s="I:/purebasic/datenbank/"        ; hier das richtige Verzeichnis angeben
If ReadFile(0, arbeitsver.s+"AUFTRAGE.PAU")   ; wenn die Datei geöffnet werden konnte, setzen wir fort...
  While Eof(0) = 0           ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
    temp_s.s  = ReadString(0)      ; Zeile für Zeile im Debugger-Fenster anzeigen
    If Trim(temp_s) =  "PAU"
      zeilen.l = 1
    
    Else
      Select zeilen
        Case  1  : AddElement(teil()):teil() = temp_s : zeilen+1
        Case  2  : AddElement(teil()):teil() = temp_s : zeilen+1
        Case  3  : AddElement(teil()):teil() = temp_s : zeilen+1
        Case  4 To 4000
          If Not Trim(temp_s) =  "PAU-END"
          AddElement(teil()):teil() = StringField(temp_s,1,"|")
          AddElement(teil()):teil() = StringField(temp_s,2,"|")
          AddElement(teil()):teil() = StringField(temp_s,3,"|")
          AddElement(teil()):teil() = StringField(temp_s,4,"|")
          AddElement(teil()):teil() = StringField(temp_s,5,"|")
          zeilen+1
          EndIf
      EndSelect   
    EndIf
    
    If Trim(temp_s) =  "PAU-END"   
      ForEach teil()
      Debug teil()
      Next
      ClearList(teil()) 
    EndIf
    
    
  Wend
  CloseFile(0)               ; schließen der zuvor geöffneten Datei
Else
  MessageRequester("Information","Konnte Datei nicht öffnen!")
EndIf 
Die nächste Schwierigkeit ist das Wegschreiben der Daten in einer Datenbank.

Aber hier gibt sich @Purebasic09 bisher verschlossen.
Welche Datenbank will er benutzen?
Die von Purebasic allgemein unterstütze Dantenbank "SQLite"?
Wieviel Datensätze wird eine Datenbank ca. beinhalten?
Wie soll aber bei mehreren Einzelteilen die Relation gelöst werden, um die Datenbanktabellen möglichst klein zu halten und die Redundanz möglichst gering zu halten?
Dies bedarf einiger Antworten.

Warten wir erstmal auf Antworten von @Purebasic09 ab.

Verfasst: 24.06.2009 08:15
von PureBasic09
Das frag ich mich auch, aber evtl. hat PureBasic09 noch mehr damit vor?
nein das hab ich nicht, denn das war nur zu zwecken, damit ich die ASCII-datei auslesen kann


@dysti ich verwende eine ODBC-Datenbank

Verfasst: 24.06.2009 08:18
von PureBasic09
dysti hat geschrieben: In @Purebasic09 seiner Datenbasis besteht ein Artikel aus mehreren Einzelteilen. Er deutet das auch hierdurch an:

Code: Alles auswählen

Case  4 To 4000 
mit dieser zeile bewirke ich nur, wieviele maximale zeilen er lesen soll

Verfasst: 24.06.2009 08:42
von PureBasic09
ich hab mal noch ne weitere frage:

ich habe in einigen dateien, die in die datenbank sollen, kommazahlen dabei.
diese werden aber standardmäßig aufgerundet. das soll aber nicht so sein, deswegen möchte ich diese nun per StrF() als fließkommazahl einbinden.

hab mir mal aus der hilfe den quellcode zusammengebastelt:

Code: Alles auswählen

Command$ = StrF(kont_zahl.f,3)
If DatabaseQuery(1,Command$)  
  While  NextDatabaseRow(1)  
    kont_zahl = Val(GetDatabaseString(1,0))
  Wend 
Else
EndIf
das problem ist aber das GetDatabaseString, denn ich bin mir net sicher ob das so sein muss

Verfasst: 24.06.2009 09:15
von Kiffi
ich schreibe es gerne für Dich noch einmal in fett:

[X] bitte Mehrfachpostings vermeiden!
Kaeru Gaman hat geschrieben:beachte bitte den [EDIT] Button oben rechts an deinem Posting.
PureBasic09 hat geschrieben:ich hab mal noch ne weitere frage: [...]
mein Tipp: konzentriere Dich doch erst einmal auf das fehlerfreie Auslesen
dieser PAU-Datei. Erst wenn Du das verstanden und umgesetzt hast, solltest
Du Dich an die Datenbank-Geschichte wagen.

Grüße ... Kiffi

Verfasst: 24.06.2009 09:19
von PureBasic09
so, das auslesen iss fertig

hab mich vorhin mit nem kollegen hingesetzt un nu gehts
hier der quellcode:

Code: Alles auswählen

P001_auslesen_auftrag: ;{
  If ReadFile(0, arbeitsver.s+"AUFTRAGE.PAU")   ; wenn die Datei geöffnet werden konnte, setzen wir fort...
    While Eof(0) = 0           ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
      temp_s.s  = ReadString(0)      ; Zeile für Zeile im Debugger-Fenster anzeigen
      If Trim(temp_s) =  "PAU" 
        Gosub P001_Max_auftrag
        zeilen.l = 1 
      ElseIf Trim(temp_s) =  "PAU-END"    
      Else
        Select zeilen
          Case  1  : arbauf_DB.s(1,0) = temp_s : zeilen+1
          Case  2  : arbauf_DB.s(2,0) = temp_s : zeilen+1 
          Case  3  : arbauf_DB.s(3,0) = temp_s : zeilen+1  : Gosub P001_eintragen_kopf_auftrag 
          Case  4 To 4000 
            arbauf_DB(0,0) = temp_s
            arbauf_DB(4,0) = StringField(arbauf_DB(0,0),1,"|")
            arbauf_DB(5,0) = StringField(arbauf_DB(0,0),2,"|")
            arbauf_DB(6,0) = StringField(arbauf_DB(0,0),3,"|")
            arbauf_DB(7,0) = StringField(arbauf_DB(0,0),4,"|")
            arbauf_DB(8,0) = StringField(arbauf_DB(0,0),5,"|")
            Gosub P001_eintragen_haupt_auftrag
            zeilen+1 
        EndSelect   
      EndIf
    Wend
    CloseFile(0)               ; schließen der zuvor geöffneten Datei
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
  EndIf
  Return ;}


P001_Max_auftrag:;{
  command1$ = "select max(PAU_lnr) from arbauf_kopf_TEMP" 
  If DatabaseQuery(1, command1$)  
    While  NextDatabaseRow(1)  
      auftrag_max_ZN = Val(GetDatabaseString(1,0)) + 1
    Wend 
  Else
  EndIf       
  Return ;}


P001_eintragen_kopf_auftrag:;{
  If auftrag_max_ZN > 0 
    command.s = "INSERT INTO arbauf_kopf_TEMP (" 
    command.s + "  PAU_lnr"
    command.s + ", PAU_Nr"
    command.s + ", PAU_Bez"
    command.s + ", PAU_Dtm"
    command.s + " ) VALUES ("
    command.s + ""    + Str(auftrag_max_ZN) + " "
    command.s + ", '" + sonderzeichen(arbauf_DB.s(1,0))  +"' "  
    command.s + ", '" + sonderzeichen(arbauf_DB.s(2,0))  +"' " 
    command.s + ", '" + datumeng(arbauf_DB.s(3,0))  +"' " 
    command.s + ")"
    If DatabaseQuery(0,command) : While NextDatabaseRow(0) : Wend  : EndIf
  EndIf
  Return ;} 


P001_eintragen_haupt_auftrag: ;{
  If auftrag_max_ZN > 0 
    command.s = "INSERT INTO arbauf_haupt_TEMP (" 
    command.s + "  PAU_lnr"
    command.s + ", PAU_ZNr"
    command.s + ", PAU_PPR_Nr"
    command.s + ", PAU_Wstck"
    command.s + ", PAU_Art"
    command.s + ", PAU_Stckz"
    command.s + " ) VALUES ("

    command.s + ""    + Str(auftrag_max_ZN) +" "
    command.s + ",  " + arbauf_DB.s(4,0)    +" "  
    command.s + ", '" + sonderzeichen(arbauf_DB.s(5,0))  +"' " 
    command.s + ", '" + sonderzeichen(arbauf_DB.s(6,0))  +"' " 
    command.s + ",  " + arbauf_DB.s(7,0)  +" "  
    command.s + ",  " + arbauf_DB.s(8,0)  +" "   
    command.s + ")"
    If DatabaseQuery(0,command) : While NextDatabaseRow(0) : Wend  : EndIf
  EndIf
  Return ;}

Verfasst: 24.06.2009 09:45
von Kiffi
PureBasic09 hat geschrieben:hab mich vorhin mit nem kollegen hingesetzt un nu gehts
hat er gut gemacht, Dein Kollege. ;-)

(bis auf die GOTOs, aber da will ich mal nicht so sein ;-))

Sag Deinem Kollegen noch, dass 'Insert', 'Update' und 'Delete' auf eine
Datenbank mit einem DatabaseUpdate(... durchgeführt werden sollen und
nicht mit DatabaseQuery(... .

Das nachfolgende While NextDatabaseRow(... kann dann auch weg.

Grüße ... Kiffi

Verfasst: 24.06.2009 09:51
von PureBasic09
gut, das hab ich geändert

aber kann mir jemand zu meiner inzwischen neuen frage helfen?

oder soll ich die frage in nem neuen thema posten?

also unabhängig von diesem hier?

Verfasst: 24.06.2009 09:52
von Kurzer
dysti hat geschrieben:@Kurzer, leider hast du wirlich zu kurz gedacht.
Wie soll das mit dem vordefinierten Array weiterlaufen?
Keine Ahnung. Ich hätte das ganze eh anderes gecoded. :wink:
Ich habe durch meinen post nur einen Hinweis gegeben, wie man PureBasic09s Code zum laufen bringt. Nicht mehr und nicht weniger.

Verfasst: 24.06.2009 09:56
von PureBasic09
2. Problem:
PureBasic09 hat geschrieben: ich hab mal noch ne weitere frage:

ich habe in einigen dateien, die in die datenbank sollen, kommazahlen dabei.
diese werden aber standardmäßig aufgerundet. das soll aber nicht so sein, deswegen möchte ich diese nun per StrF() als fließkommazahl einbinden.

hab mir mal aus der hilfe den quellcode zusammengebastelt:

Code: Alles auswählen

Command$ = StrF(kont_zahl.f,3)
If DatabaseQuery(1,Command$)  
  While  NextDatabaseRow(1)  
    kont_zahl = Val(GetDatabaseString(1,0))
  Wend 
Else
EndIf
das problem ist aber das GetDatabaseString, denn ich bin mir net sicher ob das so sein muss