Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Εξαγωγή πίνακα σε ascii file (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/262-eksagogi-pinaka-se-ascii-file.html)

stavros 04-12-09 00:23

Εξαγωγή πίνακα σε ascii file
 
Καλησπέρα σε όλους. Αντιμετωπίζω το εξης πρόβλημα:
Έχω ένα πίνακα με 9 πεδία και θέλω να τον εξάγω σε ascii file, σε συγκεκριμένη θέση αλλα πρέπει να υπάρχουν συγκεκριμένες αποστάσεις μεταξύ των πεδίων δηλ.

Το πεδίο1 ξεκινάει από την θέση 1 και έχει μήκος 9
Το πεδίο2 ξεκινάει από την θέση 10 και έχει μήκος 10
Το πεδίο3 ξεκινάει από την θέση 20 και έχει μήκος 13
Το πεδίο4 ξεκινάει από την θέση 33 και έχει μήκος 42
Το πεδίο5 ξεκινάει από την θέση 75και έχει μήκος 2
Το πεδίο6 ξεκινάει από την θέση 77 και έχει μήκος 40
Το πεδίο7 ξεκινάει από την θέση 117 και έχει μήκος 40
Το πεδίο8 ξεκινάει από την θέση 157 και έχει μήκος 12 και έχει 2 δεκαδικά
Το πεδίο9 ξεκινάει από την θέση 1169και έχει μήκος 12 και έχει 2 δεκαδικά

Μήπως ξέρει κάποιος πως μπορώ να το κάνω...?????
Ευχαριστώ...

Tasos 04-12-09 10:17

Καλημέρα Σταύρο!
Γράφεις:
Παράθεση:

Το πεδίο8 ξεκινάει από την θέση 157 και έχει μήκος 12 και έχει 2 δεκαδικά
Στους 12 αυτους χαραχτήρες, υπάρχει ΚΑΙ το κόμα, ή θα το δημιουργήσουμε εμείς;
Δώσε μας ένα μικρό παράδειγμα του αποτελέσματος πχ:

123456789123
ή
123456789,12

Τάσος

stavros 04-12-09 11:56

Τάσο έχεις δίκιο συγνώμη για την παράλειψη.
Τα δεκαδικά πρέπει να διαχωρίζονται με τελεία πχ. 100.00 ή 234.45
Επίσης πρέπει να βγάζω τα πεδία χωρίς εισαγωγικά δηλαδή πρέπει να είναι:
πεδιο1 πεδιο2....κτλ και όχι
"πεδίο1" "πεδίο2"...κτλ
Ευχαριστώ πάντος για το ενδιαφέρον...

Tasos 04-12-09 13:21

Αγαπητέ Σταύρο, καλημέρα!

Δημιούργησε ένα νέο ερώτημα με το όνομα "Qrytbl1" πήγαινε στην προβολή SQL και πέρασε τon
παρακάτω κώδικα:

Κώδικας:

SELECT
Mid([Pedio1],1,9) AS Ped1,
Mid([Pedio2],10,10) AS Ped2,
Mid([Pedio3],20,13) AS Ped3,
Mid([Pedio4],33,42) AS Ped4,
Mid([Pedio5],75,2) AS Ped5,
Mid([Pedio6],77,40) AS Ped6,
Mid([Pedio7],117,40) AS Ped7,
Mid([Pedio8],157,10) & "." & Mid([Pedio8],168,2) AS Ped8,
Mid([Pedio9],1169,10) & "." & Mid([Pedio9],1180,2) AS Ped9
FROM tbl1;

όπου" tbl1" = το όνομα του πίνακα και Pedio1,Pedio1 κτλ. το όνομα των πεδίων.

Δες αν τα αποτελέσματα είναι αυτά που ζητάς.

Για να εξάγεις το ερώτημα αυτό ως κείμενο μπορείς (αν δεν το κάνεις χειροκίνητα) να χρησιμοποιήσεις τον παρακάτω κώδικα:
Κώδικας:

DoCmd.TransferText acExportDelim, "", "Qrytbl1", CurrentProject.Path  _
& "\test.txt", True, "", 65001  ' 65001 = Unicode (UTF-8) αντί σε  ascii

Αν πάλι η όλη διαδικασία χρειάζεται να γίνει με VBA, απλά γράψε στο φόρουμ.

Περιμένουμε νέα σου

Φιλικά

Τάσος

stavros 04-12-09 18:52

Καλησπέρα Τάσο
Το δοκίμασα και μου δημιούργησε ένα ερώτημα με επικεφαλίδες ped1,ped2,ped3.....ped9
στο ped1 έχει σωστά την ημερομηνία στο ped2 έχει κάποιους αριθμούς όπως 1,3,0,.....σε διαφορετικά rows και τα υπόλοιπα ped3,ped4.....ped9 είναι κενά.

Ευχαριστώ για την ανταπόκριση πάντως...

Tasos 04-12-09 23:14

Παράθεση:

Το πεδίο1 ξεκινάει από την θέση 1 και έχει μήκος 9
Ααα...τώρα νομίζω οτι κατάλαβα ... η θέση 1 πχ. είναι η θέση στο αρχείο και όχι στο πεδίο... ή όχι;:confused:

stavros 05-12-09 10:45

Καλημέρα Τάσο
Το πεδίο πρέπει να ξεκινάει από την θέση 1.... αλλά δεν μπορώ να βρω καθόλου πως θα το κάνω χωρίς την χρήση οδηγού...

Tasos 05-12-09 11:28

Καλημέρα!
Εξηγησε μου:

το περιεχόμενο του πεδιου 2, πρέπει να περαστεί στη θέση 10 του ascii
αρχείου και να έχει μήκος 10 χαραχτήρες,
το περιεχόμενο του πεδιου 3 , πρέπει να περαστεί στη θέση 20 (μάλλον 21) του ascii
αρχείου και να έχει μήκος 10 χαραχτήρες κοκ...

Αυτό ζητάς;

Φτιαξε αν θέλεις ένα αρχείο κειμένου με μια σειρά από τα δεδομένα των πεδίων έτσι όπως θα ήθελες να τα τοποθετήσεις και ανεβασε το στο φόρουμ
για να δώσουμε μια πιο ευστοχη απάντηση.

Τα λέμε..

Τάσος

stavros 06-12-09 09:03

1 Συνημμένο(α)
Τάσο αυτό θέλω όπως το γράφεις. Δεν ξέρω καθόλου πως μπορώ να εξάγω ένα αρχείο και να δίνω την άπόσταση ανάμεσα στα πεδία και από ποιο σημείο να ξεκινάνε.
Ανεβάζω ενα txt για να δεις περίπου τι θέλω.

Tasos 06-12-09 15:13

Αγαπητέ Σταύρο, 
με τον παρακάτω κώδικα, νομίζω ότι λύνεις το πρόβλημα σου.

Option Compare Database
Option Explicit
Dim tmpText As String, rs As Object
' Εδώ ρυθμίζεις τα μήκη των πεδίων (Για το Pedio1 αντιστοιχεί το Len_f1, για το Pedio2 το Len_f2 κοκ.)
Const Len_f1 = 9, Len_f2 = 10, Len_f3 = 13, Len_f4 = 42
Const Len_f5 = 2, Len_f6 = 40, Len_f7 = 40, Len_f8 = 12, Len_f9 = 12

Sub PrintTest()
Dim fso As Object, oStream As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set oStream = fso.CreateTextFile(CurrentProject.Path & "\MyTextInUnicode.txt", True, True)
Set rs = CurrentDb.OpenRecordset("Table1", dbOpenSnapshot) ' Table1= Το όνομα του πίνακα
With rs
If .RecordCount = 0 Then
.Close
Set rs = Nothing
MsgBox "No Data to export!"
Exit Sub
End If
.MoveFirst
WriteHeaders
While Not .EOF
WriteNextLine
.MoveNext
Wend
.Close
Set rs = Nothing
oStream.Write tmpText
oStream.Close
Set oStream = Nothing
Set fso = Nothing
End With
End Sub

Function WriteHeaders() As String
' Εδώ βάλε τα ονόματα των επικεφαλίδων("Pedio1“, “Pedio1“ κτλ.). Πρόσεξε να μην υπερβαίνουν το προκαθορισμένο μήκος.
tmpText = PrintWithSpaces("Pedio1", Len_f1)
tmpText = tmpText & PrintWithSpaces("Pedio2", Len_f2)
tmpText = tmpText & PrintWithSpaces("Pedio3", Len_f3)
tmpText = tmpText & PrintWithSpaces("Pedio4", Len_f4)
tmpText = tmpText & PrintWithSpaces("Pedio5", Len_f5)
tmpText = tmpText & PrintWithSpaces("Pedio6", Len_f6)
tmpText = tmpText & PrintWithSpaces("Pedio7", Len_f7)
tmpText = tmpText & PrintWithSpaces("Pedio8", Len_f8)
tmpText = tmpText & PrintWithSpaces("Pedio9", Len_f9)
tmpText = tmpText & vbCrLf
End Function

Function WriteNextLine() As String
' Εδώ βάλε τα ονόματα των πεδίων προς εγαγωγή (Pedio1, Pedio1 κτλ.
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio1"), vbNullString), Len_f1)
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio2"), vbNullString), Len_f2)
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio3"), vbNullString), Len_f3)
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio4"), vbNullString), Len_f4)
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio5"), vbNullString), Len_f5)
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio6"), vbNullString), Len_f6)
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio7"), vbNullString), Len_f7)
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio8"), vbNullString), Len_f8)
tmpText = tmpText & PrintWithSpaces(Nz(rs.Fields("Pedio9"), vbNullString), Len_f9)
tmpText = tmpText & vbCrLf
End Function

Function PrintWithSpaces(s$, CharCount) As String
If Len(s) > CharCount Then s = Left(s, CharCount)
PrintWithSpaces = s & String(CharCount - Len(s), Chr(vbKeySpace))
End Function

Φιλικά

Τάσος

stavros 06-12-09 22:17

Καλησπέρα Τάσο έβαλα τον κώδικα που έγραψες αλλά μου βγάζει ενα μήνυμα λάθους

Run Time error '91':
Object variable or With block variable not set

Ευχαριστώ για άλλη μια φορά...

Tasos 07-12-09 02:15

1 Συνημμένο(α)
Καλημέρα Σταύρο,
Η διαδικασία ξεκινά με το Sub PrintTest().

Κάνε ξανά ένα έλεγχο αν τα ονόματα των πεδίων είναι σωστά αντιστοιχισμένα στον κώδικα.
Το ίδιο ισχύει και για το όνομα του πίνακα (Table1).

Δες αν θέλεις και το παράδειγμα στο συνημμένο.

Τα λέμε..

Τάσος

stavros 07-12-09 17:31

Καλησπέρα Τάσο!
Λειτουργεί μια χαρά....Σε ευχαριστώ πολυ
Είσαι θεος.......................................... ..

και συγνώμη για την ταλαιπωρία.....

Tasos 07-12-09 19:05

Νάσαι καλά φίλε μου!

Δε χρειάζεται να ζητάς συγνώμη, το αποτέλεσμα μετράει!

Εξάλλου, όπως πολύ σωστά λέει και ο συνεργάτης μας Γιάννης(nisgia), ...“αν δεν ρωτούσες, δεν θα το μαθαίναμε ποτέ“!


Η ώρα είναι 04:36.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2