# Noch eine Frage diesmal Datenbank



## Stephan Boettcher (29. Juni 2004)

Entschuldigt bitte, dass ich mehrere Sachen gleichzeitig frage aber ich habe mehrere Probleme.

Ich habe in einer Datenbank werte stehen "Data 1" "Data 2" usw. jetzt möchte ich gerne, dass dort neue Einträge gemacht werden also wenn ich auf den Button klicke, dann soll ein neuer Datenansatz erstellt werden.

Und dann nach inhalten suchen, die dann gelöscht werden.

Ich benutze Access-Datenbank.

Danke dir


----------



## xCondoRx (1. Juli 2004)

brauchst doch nur auf die buttons sql anweisungen legen..


----------



## Stephan Boettcher (2. Juli 2004)

aber ich habe die ja noch nichtmal aufgerufen das ist ja das Problem, wie man die Datei aufruft usw. das kann ich nicht.

Wäre net wenn du mir das erklären könntest.

Danke dir!


----------



## JensG (2. Juli 2004)

Hallo Stephan,

du hast ja leider nicht mal ansatzweise ein Konzept.
Wir wissen ja noch nicht mal wie du auf die Datenbank 
zugreifen willst ADO,DAO,RDO ?
Entweder du erklärst etwas genauer was du willst oder zeigst
mal ein wenig Code.

Wie öffnest du die Datenbank.
Was genau soll passieren wenn du auf einen Button klickst ?
Wie sieht die Tabelle aus?

Es gibt viele Möglichkeiten.


----------



## Stephan Boettcher (2. Juli 2004)

Hallo,

Danke für deine Antwort.

Ich habe mit Access eine Datenbank gemacht:

Name: list1
spalten ( in list1 ) : eins


jetzt wollte ich gerne das wissen:


Wie öffne ich die Datenbank
Wie lese ich verschiedene Spalten aus
Wie stelle ich das Ergebnis mit msgbox dar?
Wie kann ich etwas zu der Datenbank hinzufügen
Wie kann ich etwas in der Datenbank ändern
Wie kann ich was zur Datenbank hinzufügen
Wie kann ich etwas aus der Datenbank löschen

mir würde reichen wenn ich Schritt 1-3 erklärt bekomme, den rest kann ich dann alleine dazulernen, das Problem ist halt, ich habe keinen Ansatz, wonach ich suchen könnte, ich finde nur Quelltexte ohne Erklärung und die sind über 20 Zeilen und ich verstehe daraus nichts.

Ich denke ich werde hier hilfe bekommen,
Ich hoffe ihr versteht was ich genau meine.

Danke.


----------



## JensG (2. Juli 2004)

Hallo Stephan,

da beste für dich wäre ein gutes Buch, aber ich wills mal versuchen.
Es gibt viele verschiedene Möglichkeiten eine Access Datenbank
zu öffnen.
Am einfachsten wäre es mit dem ADODC Steuerelement, aber
davon halte ich nichts.

Sicherer und vor allem übersichtlicher ist es , wenn man gleich per Code
eine Connection und ein Recordset öffnest und am besten ganz auf das ADODC
verzichtest. Es gibt nichts, was man ohne das ADODC nicht auch machen
kann und man hat dabei noch den Vorteil,  sehr viel mehr Kontrolle
über alle Abläufe zu haben.

Also fangen wir mal an:

Also ich nutze ADO als Zugriffsmöglichkeit.
(DAO ist nicht mehr zeitgemäß und wird nicht mehr von MS
weiterentwickelt.)

Du mußt unter Veweise "Microsoft ActiveX Data Objects 2.X Library"
einbinden.
An Stelle des x's sollte mind. 5 besser 8 stehen. Die neueste mdac
Version von MS ist als 2.8 kostenlos herunterladbar.
Desweiteren sollte eine aktuelle Jet Engine installiert sein. Diese
gibt es mitlerweile in der Version SP8 für XP und 7 glaube ich für
Win98.
Bei XP brauchst du aber erst mal gar nichts zu installieren das ist
hauptsächlich bei prof. Anwendungen notwendig, fürs Beispiel geht
ohne die neuesten Versionen.

Ich gehe jetzt mal von einer Form ohne Module aus.
In der Form gibt es eine Listbox die ich mit der einen
Spalte deiner Tabelle fülle.


Im Deklarationsteil der Form: 

Private cn               As ADODB.Connection
Private rs               As ADODB.Recordset

Im Load Ereignis der Form: 



```
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

With cn
         .Properties("Data Provider") = "Microsoft.Jet.OLEDB.4.0"
         .Properties("Data Source") = deine Datenbank
         .Properties("User ID") = "Admin"
         .Properties("Jet OLEDB:Database Password") = dein Passwort wenn es
         keins gibt kann das weggelassen werden
         .Cursorlocation = adUseClient
         .Open   --> hier wird die Datenbank geöffnet
End With

With rs
        rs.Source = "Select eins from List"
        rs.ActiveConnection = cn
        rs.CursorLocation = adUseClient       '---> bedeutet das das gesamte
                                                                                   Recordset sofort lokal in den
                                                                                    Speicher gelesen wird.  
        rs.CursorType = adOpenStatic
        rs.LockType = adLockOptimistic
        rs.Open   '---> Recordset wird geöffnet
End With

'Jetzt füllen wir die Listbox wenn Daten in der Tabelle vorhanden sind

Do while not rs.EOF       'Schleife solange laufen lassen bis End of File erreicht
                                            'ist
          List1.Additem rs.Fields("eins").Value          
    rs.Movenext                 ' zum nächsten Datensatz springen
Loop

rs.Close                          ' Recordset schliessen
set rs = Nothing             'Objekt zerstören
```

Im UnLoad Ereignis der Form: 

cn.close
set cn = Nothing

Im Click Ereignis eines Buttons: 

'Hinzufügen eines Datensatzes:

cn.Execute("Insert Into List (eins) Values (" & Variable & ")")

Wenn die Spalte ein Textfeld ist muss die Variable in Hochkommas
gesetzt werden also  ..... Values ( ' " & Variable & " ' )")

Wenn in der Variable selbst Hochkommas vorkommen müssen diese
durch doppelte Hochkommas ersetzt werden 
z.B.  mit Variable = Replace(Variable" '  ", " '' " )


'Ändern eines Datensatzes

cn.Execute("Update List set eins = " & neuerWert & " where eins = " & alterWert )


Das mit dem Hinzufügen und Ändern kann auch über ein Recordset
mit Rs.Addnew oder rs.Update gemacht werden aber das führt 
jetzt zu weit.

Es gibt viele Beispiele im Netz und du musst versuchen es langsam
zu erlernen.
Wenn dann ein paar Erfolge kommen macht das auch Spaß.

Ich hoffe das war ein wenig verständlich.

Gruß
Jens


----------



## JensG (2. Juli 2004)

Als Ergänzung, falls das vorherige Posting
ein Profi liest.

Das ganze ist natürlich nur sehr einfach ohne
Fehlerbehandlung gehalten.
Fehlerbehandlung in VB in sehr wichtig aber 
ein Ding für sich, deshalb aus Zeitgründen und
dem besserem Verständis erst mal ohne.


----------



## Stephan Boettcher (3. Juli 2004)

Danke für deine sehr ausführliche Antwort.

Ich habe mal angefangen und erhalte Laufzeitfehler 91:

Objectvariable oder Width Variable nicht festgelegt


wäre für deine Hilfe dankbar.

MfG Stephan


----------



## Stephan Boettcher (3. Juli 2004)

Entschuldige bitte, mein Fehler.

Aber jetzt erhalte ich Laufzeitfehler 3265:

Ein Object, dass den angegebenen Namen oder dem Ordinalverweiß entspricht kann nicht gefunden werden.

Danke für eure hilfe!


----------



## JensG (3. Juli 2004)

Zeig mal den Codeausschnitt wo der Fehler auftritt.


----------



## Stephan Boettcher (3. Juli 2004)

hallo,

habe gerade vor 2 Minuten in google einen Tipp zu dem Fehler gefunden

Danke für deine Hilfe! Entlich funktioniert das mit Datenbank.

Vielen Dank für deine hilfe

aber eine Frage habe ich noch!

Wie kann ich hingehen auf dem Computer alle Daten durchsuchen? 
z.B. Dateien mit der endung .txt .html usw. sollen dann zur Datenbank hinzugefügt werden.

gibt es da eine möglichkeit?

Danke dir!


----------



## Stephan Boettcher (5. Juli 2004)

Hi,

Jetzt habe ich diesen fall:

test = Variable & "\" & Variable2

      Cn.Execute ("Insert INTO (url) Values (" & test & ")")

bekomm ich einen Syntaxfehler ?

Wer kann helfen?

Danke !


----------



## JensG (5. Juli 2004)

Hallo Stephan,

test ist ja sicherlich ein String.
Ich hoffe das Datenbankfeld ist auch ein Textfeld.

>test = Variable & "\" & Variable2

Strings müssen vor und nach der Variable ein Hochkamma
enthalten.

Also entweder

test = "'" & Variable & "\" & Variable2 & "'"

>Cn.Execute ("Insert INTO (url) Values (" & test & ")")

oder so

Cn.Execute ("Insert INTO (url) Values (' " & test & "' )")

Gruß
Jens


----------



## Stephan Boettcher (5. Juli 2004)

ok jetzt kommt:

"Zu viele Zeichen zum Einfügen" oder so ähnlich wie kann ich 

1000 Zeichen in eine Datenbank einfügen?

Danke!


----------



## JensG (5. Juli 2004)

Hallo Stephan,

dann ist das Datenbankfeld zu kurz dimensioniert.
Du kannst in ein Textfeld bei Access max 255 Zeichen
einfügen aber nur wenn es als Solches Text(255) angelegt
wurde.
Wenn du mehr brauchst musst du ein MEMO Feld mit 
LONGTEXT anlegen.

Das kannst du so per Code machen

On error resume next

cn.Execute ("Alter Table Tabelle1 Alter Column Feld1 TEXT(255)")
oder 
cn.Execute ("Alter Table Tabelle1 Alter Column Feld1 LONGTEXT ")

On error goto 0

Die Inhalte gehen nicht verloren.

In Access geht es natürlich einfacher zu machen.

Gruß
Jens


----------



## Ein_Freund (5. Juli 2004)

Wähle als Felddatentyp 'Memo'. Dann hast Du Platz für 65.535 (oder so um den Dreh) Zeichen...

EDIT: Ok, da war jemand schneller


----------



## Stephan Boettcher (6. Juli 2004)

Danke euch! 

Jetzt geht es.


----------



## Stephan Boettcher (6. Juli 2004)

habe leider noch ein Problem, was ich gerade bemerkt habe...

Ich habe jetzt sowas:

Test ' Test

dann kommt ein Fehler bin dann hingegangen wie oben beschrieben:

Variable = Replace(Variable" ' ", " '' " )

aber es geht nicht ... 
Habe die Variabeln angepasst und es kahm ein Fehler, dann habe ich so gemacht:

Variable = Replace(Variable, " ' ", " '' " )

ein " , " vergessen .

Aber es kommt beim Eintragen in die Datenbank immer noch ein Syntaxerror.

Das muss am ' liegen, da alle anderes Dateien ohne ' eingetragen werden.

Danke euch!


----------



## Stephan Boettcher (9. Juli 2004)

Hallo,

Habs jetzt geschafft.

Jetzt möchte ich einen immer gleichen Text einfügen habe ich versucht:

Cn.Execute ("INSERT INTO Songs (Band) Values ('test')")

geht nicht dann:

TestVariable = "text"
Cn.Execute ("INSERT INTO Songs (Band) Values ('" & TestVariable & "')")

geht auch nicht...

Syntaxerror kommt immer.
Aber warum?
wenn ich "Band" in "Song" ändere geht es.
Beide sind Felttyp "Memo"

Danke!


----------



## JensG (9. Juli 2004)

Hallo Stephan,

wie sieht die Fehlermeldung aus.

Was sagt Err.Description
                  Err.Number
                  cn.Errors ?

Wie ist die Tabelle aufgebaut ?
Gibt es einen Primärschlüssel ?


----------



## Stephan Boettcher (9. Juli 2004)

Syntakfehler in der Insert Into Anweißung
.2147217900

bei Cn.Errors kommt "Ungültige Anweißung"

Aufbau:

Url | Band | Song

alles Typ: Memo
keinen Primaryschlüssel.


Danke.
MfG Stephan


----------



## JensG (10. Juli 2004)

Hallo Stephan,

diese Meldung sagt nicht wirklich viel aus.

Merke dir mal folgende Dinge eine Tabelle.

- Jede Tabelle sollte einen eindeutigen Primärschlüssel besitzen.
  Bietet sich kein Feld an lege ein ID Feld mit Autowert so das bei jedem
  Insert sich der Wert erhöht. Es muss nicht aber es können Probleme
  auftauchen wenn es keinen PS gibt.
- Gehe Sparsam mit Memofeldern um ! 

Denke daran im gesamten Text der Stringvariable alle ' durch '' zu ersetzen !

An der Insert  Anweisung war auch kein wirklicher Fehler zu erkennen.
Ändere mal oben erwähntes, wenn es dann nicht  und die DB ist noch
nicht so groß dann zippe sie mal und maile sie mir rüber.

Jens


----------



## Stephan Boettcher (11. Juli 2004)

Hallo,

Also das ist merkwürdig...

Ich habe jetzt mal "Band" durch "Bandname" ersetzt und es geht ohne Probleme...

Warum ist das so?

Weiß da einer warum ich "Band" nicht benutzten kann?
Danke!


----------



## Stephan Boettcher (14. Juli 2004)

habe noch ein Problem, ich habe es geschaft, das Programm leuft jetzt einigermaßen ohne fehler usw.

Nur es kommt bei Windows 98 und Access 2000 ein Fehler "Runtime fehler 430"
Classe wird nicht unterstützt.

hat da einer ne idee?

Danke


----------



## Stephan Boettcher (26. Januar 2005)

Hallo,

Ich habe mich nochmal rangesetzt und wollte alles was in Text1 Text2 und Text3 steht in Var setzten und ab in die DB:


```
Var = Text1 & Text2 & Text3
db.Execute ("UPDATE options SET Seriennummer = " & Var)
```


ich erhalte "Datentypen in Kriterienausdruck unverträglich"

was ist das, und wie kann ich es beheneb?
Wenn ich & Text3 weglasse, funktioniert alles.


Danke!


----------

