Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: Juno am Oktober 27, 2010, 09:35:23

Titel: Zahl aus Textdatei einlesen.
Beitrag von: Juno am Oktober 27, 2010, 09:35:23
Hallo zusammen,

ich habe ein Problem und hoffe ihr könnt mir helfen.... ;)

Ich habe eine Textdatei als ein Nummern-Pool. Diese Textdatei kommt von einer anderen Software.
Und ich muss jetzt aus dieser Textdatei auf Knopfdruck eine Nummer in meinen aktuellen DS übernehmen.

Die Datei ist so aufgebaut:
BGS
1000000000 = ACTIVE
1000000001 = ACTIVE
1000000002 = ACTIVE

UNS
2000000000 = ACTIVE
2000000001 = ACTIVE
2000000002 = ACTIVE


In meiner Datenbank habe ich 2 verschiedene "arten" Datensätze. Die Art "BS" muss immer eine Nummer aus dem Abschnitt "BGS" bekommen und die Art "US" muss immer eine Nummer aus dem Abschnitt "UNS" bekommen.

Es gibt noch folgende Vorgaben:
Die Entnahme von Nummern aus dem Pool muss unter Berücksichtigung des Datei-Lockings erfolgen. Bevor die Datei für Zugriff geöffnet werden darf, muss eine Datei gleichen Namens erweitert um das Suffix ".LCK" im gleichen Verzeichnis erstellt werden. Findet eine Anwendung bereits ein entsprechendes Lockfile vor, darf kein Zugriff auf den Pool erfolgen, bis das Lockfile verschwunden ist und ein eigener Lock erfolgreich erstellt wurde.
Nummern können durch Setzen des rechten Wertes auf eine Zeichenfolge ungleich "ACTIVE" oder durch komplette Löschung einer Zeile aus der Datei entnommen werden. Die Nummern werden automatisch von der anderen Software aufgefüllt.
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: DF6GL am Oktober 27, 2010, 14:19:31
Hallo,

wobei brauchst Du Hilfe?

Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am Oktober 27, 2010, 15:23:15
Ich brauche Hilfe dabei wie ich die Zahl auf Knopfdruck aus der Datei in meinen Datensatz einfügen kann.

Beispiel:
DS_id = 48
Typ = "US"
Nummer = Wenn ich einen Button klicke soll jetzt hier die nächste freie Nummer aus der textdatei entnommen werden gemäß den oben genannten Vorgaben.
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: DF6GL am Oktober 27, 2010, 16:13:38
Hallo,

das habe ich ja schon verstanden...

Nur die Lösung der Vorgabe kann halt nicht insgesamt einfach nur so hier hingeklatscht werden, weil sie nicht nur aus einer und nur aus 2 oder 3 Zeilen Code besteht....

Vielleicht solltest Du Dir ein Konzept überlegen, wie ein gangbarer Lösungsweg sein könnte, z. B.:

--Auf LCK-Datei_Existenz prüfen und bei Abwesenheit eine LCK-Datei erzeugen.
--TXT-Datei per VBA gruppiert in eine Access-Tabelle einlesen mit einem solchen Ergebnis:

BGS  1000000000   ACTIVE
BGS  1000000001   ACTIVE
BGS  1000000002   ACTIVE
UNS  2000000000   ACTIVE
UNS  2000000001   ACTIVE
UNS  2000000002   ACTIVE
.
.


--Mit einem Kombifeld, dessen Datensatzherkunft diese Tabelle entspr. gefiltert (nach "BGS" oder "UNS") ausliest, wird eine gewünschte Nummer (unklar ist, wie die Tabellen heißen, wer die Auswahl vollführen soll nach welchen Vorgaben und wann das Ganze passieren soll) ausgewählt und weiterverarbeitet.
--Danach erfolgt das Setzen von "INACTIV" im betroffenen Datensatz (oder das Löschen desselben, je nachdem, was gefordert ist)
--Zuletzt wird die vorhandene TXT-DAtei gelöscht und die Access-Tabelle wieder (per VBA) in eine (neue) TXT-Datei passend formtiert exportiert, sowie die  LCK-Datei gelöscht.


Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am Oktober 28, 2010, 12:08:01
so wie du das geschildert hast hatte ich mir das vorgestellt.

Zu deinen Fragen:
- Das Kombifeld existiert bereits und heißt "vktyp_nr". Das Feld wo die ausgelesene Nummer eingefügt werden soll heißt "vk_zedalnr". Die Tabelle heißt "vkobjekte"
- Wenn der Benutzer einen neuen DS angelegt hat kann er über das Kombifeld auswählen UNS/BGS. Danach kann er dann auf einen Button klicken und es soll dann die nächste freie Nummer in vk_zedalnr eingetragen werden.
- Die verwendete Nummer soll dann in der Datei gelöscht werden.
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am Oktober 28, 2010, 17:39:50
Hallo Franz,

oder wolltest du sonst noch etwas wissen?
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: DF6GL am Oktober 28, 2010, 20:33:52
Hallo,

ja, wobei ich schon vorher das gefragt habe:

Wo kann ich nun helfen, bzw. wo kommst Du nicht klar?


Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 01, 2010, 10:41:05
Ich habe den ersten Schritt gemacht (Also überprüfen ob Datei existiert, wenn nicht dann anlegen der .lck Datei)
Aber wie mache ich das mit dem Einlesen des Inhaltes?
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: DF6GL am November 01, 2010, 12:18:15
Hallo,

nun, die Txt-Datei per open-Command öffnen und Zeile für Zeile einlesen (z. B. mit Line Input).  Dabei die "Überschrift" und die "Datenzeilen" erkennen und separat so behandeln, dass "Zeilen"  (3 Variablen) so entstehen, wie Du vorher gepostet hast. Dann diese "Zeilen" als je einen Datensatz per Recordset (oder mittels Anfüge-SQL-String) in eine Tabelle schreiben.

Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 01, 2010, 12:43:30
ZitatDabei die "Überschrift" und die "Datenzeilen" erkennen und separat so behandeln, dass "Zeilen"  (3 Variablen) so entstehen,

Ich habe noch nie eine Datei eingelesen. Habe also keinen Dunst wie ich deine Hilfestellung realisieren soll. Könntest du das auf dumm-deutsch-für-anfänger erklären?
Wenn ich wüsste wie das ging dann würde ich nicht hier im Forum fragen...  ;) ;D
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 01, 2010, 15:40:21
Hier mal n bsp, obs hilft weis ii net
Function NeueFreieNr_(ByVal sUeberschrift As String) As Long
   Dim sBuff As String
   Dim sf() As String
   Dim i As Long, NumKreis As Long
   Dim ff As Integer
   
   ff = FreeFile
   Open "laufwerk:\Path\DeineNummernTextDatei.txt" For Binary As ff                               '<-- Hier deine Datei angeben
   sBuff = String$(LOF(ff), 0)
   Get #ff, , sBuff
   Close #ff
   sf() = Split(sBuff, vbCrLf)
   NumKreis = Switch(sUeberschrift = "BGS", 1, sUeberschrift = "UNS", 2)
   For i = 1 To UBound(sf) 'sf(0) wird übersprungen
       If Val(Left(sf(i), 1)) = NumKreis And InStr(sf(i), "ACTIVE") > 0 Then
           NeueFreieNr_ = Val(sf(i))
           Exit For
       End If
   Next
End Function
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: DF6GL am November 01, 2010, 16:39:17
Hallo,

und hier noch meine Version (nur Einlesen und Speichern in einer Tabelle:


Sub FileRead()
Dim lu As Long, strP1 As String, Zeile As String, a
Dim db As Database
Set db = CurrentDb

lu = FreeFile
Open "c:\aom.txt" For Input As #lu

Do Until EOF(lu)

    Line Input #lu, Zeile
   
    If Len(Zeile) > 0 Then
   
        If Len(Zeile) = 3 Then
        strP1 = Zeile
        a = Split(Zeile, "=")
    Else
        a = Split(Zeile, "=")
    End If
   
    If UBound(a) = 1 Then db.Execute "insert into tblTest (Feld1,Feld2,Feld3) values ('" & strP1 & "','" & Trim(a(0)) & "','" & Trim(a(1)) & "')"

    End If
Loop
Close #lu
Set db = Nothing

End sub
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 02, 2010, 13:11:23
vielen Dank für die 2 Lösungen. Aber beide funktionieren nicht so richtig.

Bei Lösung wo die Zahl direkt in ein Feld geschrieben wird kommt nur einen 0.

Und bei der zweiten Lösung werden die Zahlen zwar ausgelesen aber in der Tabelle ist immer ein Viereck mit einem Fragezeichen. Außerdem gibt es keine Unterscheidung zwischen BGS und UNS.

Ich denke mal das die Probleme davon kommen, dass ich die Situation nicht richtig beschrieben habe. Deshalb anbei eine Demo-Datenbank und Textdatei.

Von der Sache her würde mir die erste Lösung besser gefallen. Aber gibt es dann auch eine Möglichkeit die Zeile in der Textdatei zu löschen oder auf Inaktive zu setzen?


[Anhang gelöscht durch Administrator]
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 02, 2010, 13:27:02
1. Da ich kein Acc2007 oder höher hab kann ich die DB nicht öffnen.
2. jup du hattest es leider nicht ganz genau beschrieben denn z.B. UNS <> [bmu.uns] darum gibt er dir auch nur Null zurück weil er die richtige Section nicht findet. desweiteren seh ich gerade das dein Nummernkreis riesige Werte beinhaltet. Ich schau mal ob ich's mit doubles gebacken bekomme.
ZitatAber gibt es dann auch eine Möglichkeit die Zeile in der Textdatei zu löschen oder auf Inaktive zu setzen?
Ja auch das wäre drinne. momentchen, please hold the line .. oda so

Anbei eine 2003er bsp, ist nur ein Formular
im Code mußt du den Path für sFileWOE anpassen. bei mir lautet er "h:\documentNumberPool"
zudem wird von folgender vorraussetzung ausgegangen: Die einzelnen Nummernkreise beginnen immer mit einer eindeutigen Zahl, also bmu.bgs mit 1, bmu.uns mit 2 etc.



[Anhang gelöscht durch Administrator]
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 02, 2010, 14:35:38
Hier mal der geänderte Code, erstellt auch ne Lock-file



Private Sub Befehl10_Click()

    Dim sFileWOE As String
    sFileWOE = "h:\documentNumberPool" <--Hier mußt du den path anpassen

    If Len(Dir(sFileWOE & ".LCK")) = 0 Then
        Me.Text0 = NeueFreieNr_(Me.Rahmen2, sFileWOE, True)
    Else
        MsgBox "Nummernliste momentan gesperrt." & vbCrLf & _
               "Probieren sie es später wieder."
    End If
End Sub

Function NeueFreieNr_(ByVal lNumKreis As Long, ByVal FilePathWOE As String, Optional ByVal BoolDeaktiviereNeueNr As Boolean = False) As String
   On Error GoTo Sub_ERR_Handle
   Dim sBuff As String
   Dim sf() As String
   Dim i As Long, NumKreis As Long, lRet As Long
   Dim ff As Integer
       
   Const DataE = ".dat"
   Const LockE = ".LCK"
   If lNumKreis = 0 Then Exit Function
   '//------------------------------------------------------------------------------------------------------------------
   '// Erstelle LCK-File
   '//------------------------------------------------------------------------------------------------------------------
   ff = FreeFile: Open FilePathWOE & LockE For Binary As ff: Put #ff, 1, 1: Close #ff
   '//------------------------------------------------------------------------------------------------------------------
   '// Hole nächste freie Nummer
   '//------------------------------------------------------------------------------------------------------------------
   ff = FreeFile: Open FilePathWOE & DataE For Binary As ff: sBuff = String$(LOF(ff), 0): Get #ff, , sBuff
   sf() = Split(sBuff, vbCrLf)
   'NumKreis = Switch(sUeberschrift = "BGS", 1, sUeberschrift = "UNS", 2, sUeberschrift = "ATA", 3)
   NumKreis = lNumKreis
   For i = 1 To UBound(sf) 'sf(0) wird übersprungen
       If Val(Mid(sf(i), 2, 1)) = NumKreis Then
           If InStr(sf(i), "ACTIVE") > 0 And InStr(sf(i), "INACTIVE") = 0 Then
               NeueFreieNr_ = Format(Val((sf(i))))
               If BoolDeaktiviereNeueNr = True Then
                   sf(i) = vbTab & Format(Val(sf(i))) & vbTab & "= Is InActive"
                   Put #ff, 1, Join(sf(), vbCrLf)
               End If
               Exit For
           End If
       End If
   Next
Sub_KillLockAndExit:
   Close #ff
   '//------------------------------------------------------------------------------------------------------------------
   '// Lösche LCK-File
   '//------------------------------------------------------------------------------------------------------------------
   Kill FilePathWOE & LockE
   Exit Function
   
Sub_ERR_Handle:
   Debug.Print Err.Number, Err.Description
   Err.Clear
   GoTo Sub_KillLockAndExit
   
End Function



Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 02, 2010, 15:26:38
vielen Dank!! Dat funktioniert ja in deiner DB. Jetzt habe ich das versucht in meine DB einzubauen. Habe ein kleines Problemchen.
Ich verwende anstatt der Optionsgruppe ein Kombinationsfeld. Wenn ich jetzt einfach den Namen meines Kombifeldes anstelle der Optionsgruppe eintrage kommt ein Fehler. Was muss ich da beachten?
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 02, 2010, 15:35:21
Ach nee, ich habs geregelt. Jetzt kommt aber die Fehlermeldung "Das Feld ist zu klein für die Datenmenge, die Sie hinzufügen wollten. Versuchen Sie, weniger Daten einzufügen.

Woran könnte das liegen?
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 02, 2010, 16:08:23
du willst die Nummer speichern? Wie sieht das daten feld dafür aus? Ist es ein Long Integer, Double oder string? Weil wie ich schon oben erwähnt hatte sind die zahlen sehr gross, ein longfeld kann diese Zahlen nicht erfassen, d.h. du mußt ggf das Datenfeld anpassen, double oder Text.

Da ich leider dein DB nicht öffnen kann weis ich leider nicht was dein Kombifeld zurückgibt, ich nehme mal an bmu.bgs, bmu.nwl, bgu.uns

Dann hier mal die Rückgabefunktion bei der du das als Text angeben kannst.
ZitatFunction NeueFreieNr__(ByVal Section As String, ByVal FilePathWOE As String, Optional ByVal BoolDeaktiviereNeueNr As Boolean = False) As String
   
    Dim ff As Integer
    Dim s As String
    Dim sf1() As String, sf2() As String
    Dim lRet As Long, i As Long
    Dim sNeueNr As String
   
    Const DataE = ".dat"
    Const LockE = ".LCK"
    If Len(Section) = 0 Then Exit Function
   
    '//------------------------------------------------------------------------------------------------------------------
    '// Erstelle LCK-File
    '//------------------------------------------------------------------------------------------------------------------
    ff = FreeFile: Open FilePathWOE & LockE For Binary As ff: Put #ff, 1, 1: Close #ff
    '//------------------------------------------------------------------------------------------------------------------
    '// Hole nächste freie Nummer
    '//------------------------------------------------------------------------------------------------------------------
    ff = FreeFile: Open FilePathWOE & DataE For Binary As ff: lRet = LOF(ff): Close #ff
    s = String$(lRet, 0)
    lRet = GetPrivateProfileSection(Section, s, lRet, FilePathWOE & DataE)
    s = Left(s, lRet)
    sf1() = Split(s, Chr(0))
    For i = 0 To UBound(sf1)
        If Len(sf1(i)) > 0 Then
            sf2() = Split(sf1(i), "=")
            If sf2(1) = "ACTIVE" Then
                sNeueNr = sf2(0)
                Exit For
            End If
        End If
    Next
   
    '//------------------------------------------------------------------------------------------------------------------
    '// Deaktiviere Nummer im Nummernpool
    '//------------------------------------------------------------------------------------------------------------------
    If Len(sNeueNr) > 0 Then
        lRet = WritePrivateProfileString(Section, sNeueNr, " Ist Nicht mehr verwendbar", FilePathWOE & DataE)
        NeueFreieNr__ = sNeueNr
    End If
   
Sub_KillLockAndExit:
    '//------------------------------------------------------------------------------------------------------------------
    '// Lösche LCK-File
    '//------------------------------------------------------------------------------------------------------------------
    Kill FilePathWOE & LockE
    Exit Function
   
Sub_ERR_Handle:
    Debug.Print Err.Number, Err.Description
    Err.Clear
    GoTo Sub_KillLockAndExit

End Function
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 02, 2010, 16:41:52
ja, das Kombifeld gibt bmu.bgs etc. zurück.
Wenn ich das Feld jetzt als Text anlege und dann deinen Code verwende kommt folgender Fehler:
Fehler beim Komplieren:
Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft.

Beim Debuggen zeigt er auf diese Zeile:
Me.nw_nr = NeueFreieNr_(Me.vktyp_nameopt, sFileWOE, True)
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 02, 2010, 16:57:25
Anbei die DB mit beiden Varianten:
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 02, 2010, 17:30:37
Ich bekomme dann wieder die Fehlermeldung mit der Größe.

Beim debuggen wird mir dieser Code angezeigt:
       Me.nw_nr = NeueFreieNr__(Me.vktyp_nameopt, sFileWOE, True)
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 02, 2010, 17:42:46
Wenn möglich speichere deine DB unter einen anderen namen(kopieren mit explorer), öffne diese (neue) und unter Extras-->Datenbank Dienstprogramme-->datenbank konvertieren in das format 2003 auswählen. Lade dies dann mal hoch, ich versuchs zu blicken warum's bei dir nicht will.
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 03, 2010, 08:44:49
Ich habe meinen Fehler entdeckt...
Jetzt funktionierts!! Vielen Dank. ;D ;D
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 03, 2010, 09:16:40
Ich habe jetzt noch ein zweites Problem... Vielleicht kannst du mir dabei auch behilflich sein

Ich muss für die gleiche Software eine Datei aus meinem Access exportieren. Anbei ist eine Demo-Datei.
Das ganze funktioniert dann so:
1. Ich lege in einem Formular einen neuen DS an.
2. mit dem klick auf einen Button soll dann diese Datei erstellt werden. Die Datei beinhaltet immer nur die Daten eines Datensatzes aus Access.

Die Datei ist eigentlich so aufgebaut:
"Feldbeschreibung","Feldinhalt"

Ich habe das bisjetzt so gelöst:
Dim strDateiname As String

strDateiname = "E:\...\test.bs"
   Open strDateiname For Output As #1

       Write #1, "BGSDokument.Layer.Daten.Abfallbezeichnung", Nz(avv_name, "")
       Write #1, "BGSDokument.Layer.Daten.Abfallschluessel", Nz(vk_avv, "")
       Write #1, "BGSDokument.Layer.Daten.Nachweisnummer.NachweisNr", Nz(nw_nr, "")
       Write #1, "BGSDokument.Layer.Daten.Menge", Nz(vk_mengeTo, "")


Aber vielleicht kennt jemand von euch eine bessere Variante. Weil so muss ich ziemlich viele Zeilen schreiben.

[Anhang gelöscht durch Administrator]
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 03, 2010, 13:52:52
Ich glaub du kommst leider nicht darum herum, ne menge Zeilen zu schreiben, da irgendwo ja die Verknüpfungen zwischen der Feldbeschreibung(z.B. BGSDokument.Layer.Daten.ATBListe.Befoerderer[1].NameUndAdresse.Name.Name1) und dem Feldinhalt hergestellt werden muss. Du könntest einen teil des Feldinhaltes mittels einer Konstante abkürzen, aber um die Anzahl der Zeilen kommst du nicht drum herum.

Mir fallen imo 2 Möglichkeiten ein
a) du erstellst eine Tabelle in der die Verknüpfungen hergestellt werden, ggf die Feldbeschreibung auf verschiedene Spalten zerlegen und lässt bei der schreibroutine eine Abfrage darauf los oder
b) du gibst einen Teil der Feldbeschreibung als Feldbeschreibung in den entsprechenden Feldern der Tabellen an und liest bei der Schreibroutine mittels Auslesen der Properties diese aus und setzt sie zusammen.
Beide Versionen sind jetzt aber keine Angelegenheit die man jetzt so im vorbeigehen realisieren kann.


Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 03, 2010, 14:20:39
Könntest du mir vielleicht im kleinen Stil zeigen was du meinst? Also nur mit ein/zwei Felder?
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 03, 2010, 15:26:43
Anbei n sehr simples Bsp. in Formular 2.

Tabelle1 im entwurfsmodus öffnen, damit du siehst was ich meine. (ist möglichkeit b)
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 03, 2010, 15:49:57
Ich bin ja total begeistert!!! Vielen Dank;D
Ich werds mir jetzt mal in meine DB umbauen.
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 03, 2010, 16:01:29
Bin schon auf das erste Problem gestoßen  :(

Man kann nicht zufällige 2 Beschreibungen hinterlegen oder?
Ich habe hier wieder die Differenz zwischen bmu.bgs und bmu.uns.
Beide Arten DS sind in der gleichen Tabelle hinterlegt und unterscheiden sich nur über ein Kombifeld.

bmu.bgs und bmu.uns würden aber zwei verschiedene Beschreibungen benötigen.

Zur Not müsste ich das dann in 2 verschiedene Tabellen abspeichern. Oder hättest du einen anderen Vorschlag?
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 03, 2010, 16:31:31
doch ginge, die schnellste und einfachste wäre die unterschiedlichen beschreibungen durch die Pipe von einander zu trennen.
z.b.ATBListe.Befoerderer[1].Nummer.BehoerdlicheNr|ATBListe.Befoerderer[2].Nummer.BehoerdlicheNr|
aber hier mußt du darauf achten das die Reihenfolge stimmt also z.b. 1=bmu.bgs,2=bmu.nwl,3=bmu.uns


oder du gibst die Überschrift gleich mit
bmu.bgs=ATBListe.Befoerderer[1].Nummer.BehoerdlicheNr|bmu.uns=ATBListe.Befoerderer[2].Nummer.BehoerdlicheNr|

dazu dann noch in die Funktion angepasst:
Gilt für die erste Möglichkeit

Code (wie imma ohne Gewähr) [Auswählen]
...
dim sf() as string
...

sf() = split(prop.Value,"|")
if ubound(sf) >=1 then
     sOut = sOut & "Write #ff " & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & _
                 Switch(sUeberscrift = "bmu.bgs",sf(0), sUeberscrift = "bmu.nwl",sf(1),sUeberscrift = "bmu.uns",sf(2) ) & _
                 Chr(34) & vbCrLf
else
     sOut = sOut & "Write #ff " & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
end if





Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 03, 2010, 17:05:49
Sobald ich nach dem | etwas eintrage dann bekomme ich diese Fehlermeldung:
Index außerhalb des gültigen Bereichs.

Mir wird dann diese Zeile angezeigt:
Switch(sUeberscrift = "bmu.bgs", sf(0), sUeberscrift = "bmu.nwl", sf(1), sUeberscrift = "bmu.uns", sf(2)) & _
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 03, 2010, 17:20:54
Anbei aktualisierte:

Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 04, 2010, 10:27:12
Vielen Dank. Das funktioniert jetzt fast  ;)

Wenn ich folgendes eintrage "||text" und ich von bmu.bgs ausgehe dann bekommen ich  "","" eingetragen

Wenn ich aber "text||" eintrage habe ich keine Probleme

Außerdem wenn ich den Inhalt in eine Textdatei exportiere werden zu viele "" gesetzt.
Der Inhalt sieht dann so aus:
"""Feldbeschreibung"",""Feldinhalt""
""Feldbeschreibung2"",""Feldinhalt""
"

Wie kann ich das verhindern?
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 04, 2010, 12:21:26
Du must durch eine simple Routine prüfen ob in dem entsprechenden String des Arrays etwas steht

bezogen auf das Bso.
...
For Each fld In rs.Fields
        For Each prop In fld.Properties
            If prop.Name = "Description" Then
                sf() = Split(prop.Value, "|")
                If UBound(sf) >= 1 Then
                    s = Switch(sUeberschrift = "bmu.bgs", sf(0), sUeberschrift = "bmu.nwl", sf(1), sUeberschrift = "bmu.uns", sf(2))
                    If Len(s) > 0 Then sOut = sOut & "Write #ff " & Chr(34) & s & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                Else
                    sOut = sOut & "Write #ff " & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                End If
            End If
        Next prop
    Next fld
....
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 04, 2010, 12:49:58
was ist das "s". (Variable nicht definiert)
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 04, 2010, 13:03:26
Wenn du in deinen Modulen "Option Explicit" verwendest, was ich auch immer anschalte, mußt du jede verwendete Variable dimmen, sprich in diesem Fall die Zeile
Dim s as string
einfügen.

"Option Explicit" kannst du aber auch ausschalten, wenn man sehr einfache Variablen verwendet aus ein oder zwei Buchstaben, nur wenn die Namen komplexer werden kannst du ggf. richtig Spaß haben wenn's an die Fehlersuche geht.
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 04, 2010, 14:09:41
ok.

Hättest du auch eine Lösung für das Problem mit den "" siehe #32?
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 04, 2010, 14:21:01
Achso, hab ich überlesen. ;D
nimm mal alle Chr(34) & raus

Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 04, 2010, 15:25:01
Dann verschwinden alle!!

Wenn ich das in einem Textfeld ausgebe dann stimmt das alles. Wenn ich das aber in eine Textdatei ausgebe dann habe ich entweder alle "" doppelt (mit & Chr(34) oder überhaupt nicht (ohne & Chr(34). Macht das sinn????

So ist mein code:
...
strDateiname = "E:\.....\" & Me![vk_nr] & ".bs"

   
    sUeberschrift = [vktyp_nameopt]   '<-- hier muß der Wert Übberschrift erzeugt werden
   
   
    Set rs = Me.Recordset
    For Each fld In rs.Fields
        For Each prop In fld.Properties
            If prop.Name = "Description" Then
                sf() = Split(prop.Value, "|")
                If UBound(sf) >= 1 Then
                    s = Switch(sUeberschrift = "bmu.bgs", sf(0), sUeberschrift = "bmu.nwl", sf(1), sUeberschrift = "bmu.uns", sf(2))
                    If Len(s) > 0 Then sOut = sOut & Chr(34) & s & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                Else
                    sOut = sOut & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                End If
            End If
        Next prop
    Next fld

    Open strDateiname For Output As #1
           Write #1, sOut

    Close #1
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 04, 2010, 17:02:05
Anbei wieder ein codeschnipsel, beachte aber da ich nicht weis wie die erzeugte Datei von dir gehandhabt wird, dies nur möglichkeiten sind, welche aber ggf. nicht für dich geeignet ist.
Prozedere:
eine vorhandene Datei wird gelöscht, und danach wieder mit neuen Inhalt erstellt

...
...
    For Each fld In rs.Fields
        For Each prop In fld.Properties
            If prop.Name = "Description" Then
                sf() = Split(prop.Value, "|")
                If UBound(sf) >= 1 Then
                    s = Switch(sUeberschrift = "bmu.bgs", sf(0), sUeberschrift = "bmu.nwl", sf(1), sUeberschrift = "bmu.uns", sf(2))
                    If Len(s) > 0 Then sOut = sOut & Chr(34) & s & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                Else
                    sOut = sOut & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                End If
            End If
        Next prop
    Next fld

    Dim ff As Integer
    ff = freefile
    Kill strDateiname
    Open strDateiname For Binary As #ff
    Put #ff, , sOut
    Close #ff





Soll aber der vorhanden Text erhalten bleiben und der neue Text Angefügt werden so lautet die
Code (Putzeile) [Auswählen]
Put #ff, LOF(ff) + 1, sOut

Soll jetzt aber der vorhandene Text erhalten bleiben aber nach unten geschoben werden so ist dieser Text zunächst einzulesen, mit dem neuen String zu mischen und wieder zurückzuschreiben.

dim sSave as string
...
Open strDateiname For Binary As #ff
sSave = string$(lof(ff),0)
Get #ff, , sSave
sOut = sOut & sSave
SEEK #ff,1
Put #ff, , sOut
Close #ff



bei den beiden zuletzt genannten ist aber die Zeile Kill strDateiname zu deaktivieren.
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 05, 2010, 08:34:06
Danke deine Codes helfen mir zwar, aber nicht um das oben angesprochene Problem zu lösen.

Anbei ein paar Dateien um dir das Problem zu zeigen. Die sample... Datei ist die Vorgabe. So muss die Datei aussehen.
die 91...-Datei ist erstellt mit "& Chr(34)". Die 81....-Datei ist ohne"& Chr(34) erstellt. Vergleich mal die "Anführungszeichen".
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 05, 2010, 10:25:24
Kann ich so nicht bestätigen, bei mir wird die Datei mit dem oben dargestellten Code irgendwie richtig nach deinen Vorgaben erzeugt.
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 09, 2010, 10:49:57
Ich habe aber immer noch das Problem mit den Anführungszeichen. Kann man irgendwo einstellen ob man die mit exportieren möchte?
Wie gesagt wenn ich das in ein Textfeld exportiere dann habe ich das gleiche Ergebnis wie du. Aber wenn ich das ganze in eine Textdatei exportiere dann erscheinen die extra Anführungszeichen....
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: lumbumba am November 09, 2010, 13:07:55
Zitat von: Juno vom November 04, 2010, 15:25:01So ist mein code:...
strDateiname = "E:\.....\" & Me![vk_nr] & ".bs"

   
    sUeberschrift = [vktyp_nameopt]   '<-- hier muß der Wert Übberschrift erzeugt werden
   
   
    Set rs = Me.Recordset
    For Each fld In rs.Fields
        For Each prop In fld.Properties
            If prop.Name = "Description" Then
                sf() = Split(prop.Value, "|")
                If UBound(sf) >= 1 Then
                    s = Switch(sUeberschrift = "bmu.bgs", sf(0), sUeberschrift = "bmu.nwl", sf(1), sUeberschrift = "bmu.uns", sf(2))
                    If Len(s) > 0 Then sOut = sOut & Chr(34) & s & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                Else
                    sOut = sOut & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                End If
            End If
        Next prop
    Next fld

    Open strDateiname For Output As #1
           Write #1, sOut

    Close #1

Dieser dein Code erzeugt Textdateien mit zu vielen ". Das liegt daran das du die Datei im Output-Modus (Open strDateiname For Output As #1)

Wenn du hingegen die Datei im binary-Modus öffnest und mit Put in die Datei schreibst, wird genau das übertragen was in dem String sOut steht, und es werden keine zusätzlichen " erzeugt.

Open strDateiname For Output As #1
Write #1, sOut
Close #1


ff = Freefile
Open strDateiname For Binary As #ff
Put #ff, , sOut
Close #ff






Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am November 09, 2010, 17:03:30
danke!!! ;D ;D
Titel: Re: Zahl aus Textdatei einlesen.
Beitrag von: Juno am Dezember 06, 2010, 16:11:13
Ich habe jetzt noch eine Frage hierzu:

Wie kann ich oben den Code verwenden mit einem Recordset welches eine SQL-Abfrage als Datenquelle hat? Also so:

Set rs = db.OpenRecordset("SELECT * FROM qryDetDispo4 WHERE vk_nr = " & Me!vk_nr)

Der ganze Code funktioniert dann irgendwie nicht mehr so richtig.

Vielleicht könntest du mir nochmal helfen. :)