@Excalibur, da du ja Anfänger bist, braucht man am Anfang einen Beispielcode, mit dem man dann autark lernen kann.
Ich habe dir auf die schnelle etwas aus den Links zusammen gezimmert.
Allerdings ein kleine Schwierigkeit gibt es noch, die ich so schnell nicht lösen konnte.
Die Variable "sMyText.s" darf nur Daten einer reinen Textdatei beinhalten.
Dann wird die komplette Textdatei auch in Access gespeichert.
Erstelle ich mit Word eine "*.htm"-Datei, handelt es sich um eine XML-Datei.
Diese kann leider nicht eingelesen werden.
Ich hoffe, das die erfahrenen Progger uns aus dem Dilemma helfen können.
Wichtig: Schau dir die "Insert Into"-Anweisung an, damit du weißt, wie man eine Datenbankabfrage in SQL erstellt.
Achte auf die " und ' -Zeichen, wie die gesetzt sind.
Gerade als Anfänger fällt man immer wieder darauf herein.
Wenn du mal eine SQL-Abfrage erstellen möchtest und es soll schnell gehen:
einfach ein Abfrage mit Access erstellen, Abfrage öffnen und auf "Ansicht" -> "SQL-Ansicht" klicken.
Jetzt zeigt dir Access die SQL-Abfrage im Klartext an.
Ich denke, damit biste schon mal ein Stück weiter.
Code: Alles auswählen
; Dieses Beispiel erfordert eine MS-Acessdatei "db1.mdb"
; Eine
; Tabelle "txtdatei"
; muß erstellt werden
; mit folgenden Spalten:
; Spalte 1 = lfdnr -> Zahl
; Spalte 2 = tdname -> Text
; Spalte 3 = textdatei -> Memo
#ODBC_ADD_DSN = 1
#ODBC_REMOVE_DSN = 3
Enumeration
#Window
#MenuBar_1
#MENU_9
#MENU_10
#MENU_11
#MENU_12
#MENU_13
#MENU_14
#Button_0
#Button_1
#Button_2
#Button_3
#ListIcon_0
#container_0
#editor_0
#String_0
#String_1
#String_2
EndEnumeration
Global tdname.s, textdatei.s, MyText.s, anzlicon.l,speichern.l,textsehen.l
If InitDatabase() = 0
MessageRequester("ODBC Error", "Can't initialize the database drivers", #PB_MessageRequester_Ok)
EndIf
Procedure db_Connect(num.l, dbFile.s, dbUser.s, dbPass.s) ;dbFile = vollständiger Datenbankpfad incl. name der Accessdatei
dbName.s = GetFilePart(dbFile.s)
dbPath.s = GetPathPart(dbFile.s)
strAtt.s = "Server=MyOwnServer" + ";"
strAtt.s + "DSN=" + dbName.s + ";"
strAtt.s + "Description=" + dbName.s + ";"
strAtt.s + "DefaultDir=" + dbPath.s + ";"
strAtt.s + "DBQ=" + dbName.s + ";"
strAtt.s + "UID=" + dbUser.s + ";"
strAtt.s + "PWD=" + dbPass.s + ";"
MyMemory = AllocateMemory(Len(strAtt))
CopyMemory(@strAtt, MyMemory, Len(strAtt))
For L = 1 To Len(strAtt)
If PeekB(MyMemory + l - 1) = Asc(";")
PokeB(MyMemory + l - 1, 0)
EndIf
Next L
Result = SQLConfigDataSource_(num, #ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)", MyMemory)
FreeMemory(MyMemory)
If Result
If OpenDatabase(num, dbName.s, dbUser.s, dbPass.s) <> 0
ProcedureReturn 1
Else
MessageRequester("ODBC Error", "Can't open the database connection", #PB_MessageRequester_Ok)
ProcedureReturn 0
EndIf
Else
MessageRequester("ODBC Error", "Can't configure sql data source", #PB_MessageRequester_Ok)
ProcedureReturn -1
EndIf
EndProcedure
Procedure db_Disconnect(num.l,dbName.s) ; dbName = Name des erstellten DSN
strAtt.s + "DSN=" + dbName.s + ";"
MyMemory = AllocateMemory(Len(strAtt))
CopyMemory(@strAtt, MyMemory, Len(strAtt))
For L = 1 To Len(strAtt)
If PeekB(MyMemory + l - 1) = Asc(";")
PokeB(MyMemory + l - 1, 0)
EndIf
Next L
Result = SQLConfigDataSource_(num, #ODBC_REMOVE_DSN, "Microsoft Access Driver (*.mdb)", MyMemory)
FreeMemory(MyMemory)
EndProcedure
Procedure acessdateneinlesen()
DatabaseQuery(0,"select * from txtdatei")
While NextDatabaseRow(0)
lfdnr.s=Str(GetDatabaseLong(0,0))
tdname.s=GetDatabaseString(0,1)
textdatei.s=GetDatabaseString(0,2)
AddGadgetItem(#ListIcon_0,-1,lfdnr.s+Chr(10)+tdname+Chr(10)+textdatei)
Wend
SetGadgetItemState(#ListIcon_0,0,#PB_ListIcon_Selected)
EndProcedure
Procedure textdateieinlesen()
file$ = OpenFileRequester("Datei auswählen...","","Text (.txt)|*.txt|html files (*.*)|*.htm|All files (*.*)|*.*",0)
If file$
If ReadFile(0, file$)
length = Lof(0) ; Länge der geöffneten Datei ermitteln
*TextPointer = AllocateMemory(length) ; Reservieren des benötigten Speichers
If *TextPointer
ReadData(0, *TextPointer, length) ; Einlesen aller Daten in den Speicherblock
MyText.s = PeekS(*TextPointer)
FreeMemory(*TextPointer)
EndIf
CloseFile(0)
EndIf
EndIf
tdname.s=StringField(file$,CountString(file$,"\") + 1,"\")
anzlicon=CountGadgetItems(#ListIcon_0)+1
;EintraginsLIcon.s=Str(anzlicon + 1) + Chr(10) + tdname.s + Chr(10) + MyText.s
;AddGadgetItem(#ListIcon_0,-1,EintraginsLIcon.s)
HideGadget(#ListIcon_0,1)
ContainerGadget(#container_0,0,50,800,600)
EditorGadget(#editor_0,35, 400, 600, 100)
AddGadgetItem(#editor_0,-1,MyText.s)
StringGadget(#String_0,35, 95, 20, 20,Str(anzlicon))
StringGadget(#String_1,35, 150, 100, 20,tdname.s)
StringGadget(#String_2,35, 195, 600, 100,"")
SetGadgetText(#String_2,MyText.s)
EndProcedure
Procedure text_in_acess_speichern()
sanzlicon.s=GetGadgetText(#String_0)
stdname.s=GetGadgetText(#String_1)
sMyText.s=GetGadgetText(#editor_0) ;#String_2)
;Achtung, ist die Textdatei keine reine Textdatei sondern eine "MS-Word.htm" - Datei, funktioniert das Einlesen nicht.
sql1.s="insert into txtdatei(lfdnr, tdname, textdatei) VALUES(" + sanzlicon + ",'" + stdname.s + "','" + sMyText.s +"')"
;MessageRequester("",sql1.s)
If DatabaseQuery(0, sql1)
MessageRequester("","Datensatz erfolgreich abgespeichert")
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window, 216, 50, 800, 600, "Kunden", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window))
ButtonGadget(#Button_0, 35, 20, 120, 25, "Einlesen")
ButtonGadget(#Button_1, 200, 20, 120, 25, "Hinzufügen/Speichern")
ButtonGadget(#Button_2, 365, 20, 120, 25, "Zurück")
ButtonGadget(#Button_3, 530, 20, 120, 25, "Ende")
;-
ListIconGadget(#ListIcon_0, 35, 95, 600, 400, "LfdNr", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#ListIcon_0, 1, "Textdateiname", 100)
AddGadgetColumn(#ListIcon_0, 2, "Inhalt", 400)
db_Connect(0, "db1.mdb", "", "")
acessdateneinlesen()
EndIf
EndIf
Repeat
EventID = WaitWindowEvent()
EventType=EventType()
Select EventID
Case #PB_Event_Gadget
EventID=EventGadget()
If EventID=#Button_0 ;einlesen
textdateieinlesen()
speichern=1
ElseIf EventID=#Button_1 ; speichern
If speichern
text_in_acess_speichern()
Else
MessageRequester("","...bitte erst eine Textdatei einlesen!")
EndIf
ElseIf EventID=#Button_2 ; zurück
If speichern
If textsehen
HideGadget(#container_0,0)
HideGadget(#ListIcon_0,1)
textsehen=0
Else
HideGadget(#container_0,1)
HideGadget(#ListIcon_0,0)
ClearGadgetItemList(#ListIcon_0)
acessdateneinlesen()
textsehen=1
EndIf
EndIf
ElseIf EventID=#Button_3 ; ende
CloseWindow(#window)
End
EndIf
EndSelect
Until EventID = #PB_Event_CloseWindow
EndProcedure
Open_Window_1()