Supportnet / Forum / Anwendungen(Java,C++...)
Einige Fragen zu Visual Basic
Frage
Hallo Ihr Lieben,
ich habe bis jetzt nur mit VBScript (ASP) gearbeitet und möchte jetzt gerne mal das ganze mit vb proggen. Ich habe aber jetzt einige Fragen:
das abrufen der daten klappt soweit:
Option Explicit
Private Sub Command1_Click()
RS.MoveNext
End Sub
Private Sub Form_Load()
CN.Open "PROVIDER=SQLOLEDB.1;DRIVER=SQL Server;SERVER=;UID=;PWD=;"
SQL = "SELECT * from benutzer where a_user = circle24"
RS.Open SQL, CN
Text1 = RS.Fields("a_user").Attributes = adFldMayBeNull
Text2 = RS.Fields("a_kennwort").Attributes = adFldMayBeNull
Text3 = RS.Fields("a_email").Attributes = adFldMayBeNull
Text4 = RS.Fields("a_plz").Attributes = adFldMayBeNull
Text5 = RS.Fields("a_ort").Attributes = adFldMayBeNull
Text6 = RS!a_beschreibung.Attributes = adFldMayBeNull
Label8 = RS.Fields("a_datum").Attributes = adFldMayBeNull
Text7 = RS.Fields("a_alter").Attributes = adFldMayBeNull
Text8 = RS.Fields("a_icq").Attributes = adFldMayBeNull
Text9 = RS.Fields("a_kopfzeile").Attributes = adFldMayBeNull
Text10 = RS.Fields("a_fußzeile").Attributes = adFldMayBeNull
Text11 = RS.Fields("a_autoantwort").Attributes = adFldMayBeNull
Text12 = RS.Fields("a_signatur").Attributes = adFldMayBeNull
Label18 = RS.Fields("a_ip").Attributes = adFldMayBeNull
Label19 = RS.Fields("a_host").Attributes = adFldMayBeNull
End Sub
Private Sub Form_Unload(Cancel As Integer)
RS.Close
End Sub
_________
Wenn ich Attributes = adFldMayBeNull
weglasse, dann bekomme ich bei Null-Feldern eine Fehlermeldung. Dies halte ich persönlich für sehr beschränkt. So wie dies oben steht, also hinter jedem Feld ein Attributes = adFldMayBeNull
gehts aber auch nicht, dann bekomme ich in jedem Feld ein FALSCH angezeigt.
Fragen dazu:
1. Wie kann ich es erreichen, das ohne Attributes = adFldMayBeNull
alle Werte so gezeigt werden, wie sie auch auf dem SQL-Server liegen ?
2. Warum kommt diese fehlermeldung, wenn ich es nicht gesetzt habe
3. Warum steht ein Falsch in dem jeweiligen feld, wenn es einen Null-Wert enthält
4. Warum bekomme ich überall FALSCH angezeigt, wenn ich überall Attributes = adFldMayBeNull
schreibe
Neues Thema.
Nächstes Problem, Ich war bis jetzt immmer sehr zufrieden mit der Lektüre aus dem hause Addison-Wesley. Doch das VB 6 Buch is mir zu Assistentenbezogen und deshlab jetzt weitere Fragen, da Sie daraus nicht zu entnehmen sind.
Ein wichtiger Punkt ist ja die Navigation innerhalb des Forms. Doch dies will nicht so, wie ich möchte.
Ich habe mal zum Spaß mit dem sog. ADODC gearbeitet (Assistents/steuerelement) wenn ich das im form habe und zum beispiel "NEU" drücke dann bekomme ich einen neuen Datensatz angelegt und kann dann die Felder befüllen. Wenn das Form gexchlossen wird und ich es wieder aufmache, oh wunder dann sind die daten so da, wie eben erstellt. Mit meiner Kreation klappt dies nicht. wenn ich also
Private Sub Command1_Click()
RS.AddNew
End Sub
schreibe und nutze dann legt er einen neuen Datensatz an, bleibt aber auf dem Datensatz stehen, den ich von Anfang an gesehen habe.
Mit RS.Delete verhält es sich ähnlich. Er löscht den aktuellen Datensatz, aber er ist immer noch sichtbar.
MoveNext usw. >> scheint sich was zu bewegen, weil der tast.-cursor nicht mehr im feld ist, aber auch hier bleibt der erste sichtbare datensatz stur stehen.
ich habe etwas von einer withEvents gehört. das habe ich dann mal probiert
also dim withEvents RS As recordse
da bekomme ich dann nur die meldung dass das objekt keine automatisierungsereignisse auslöst. tolle meldung Mickysoft, echt tolle Meldung.
normalerweise ist es ja auch so, das wenn ich AS geschrieben habe und dann ein leerzeichen folgt, das mir dann eine liste angezeigt wird. dort steht schon kein Recordset drin. mmhh
ok dann habe ich es mit:
Dim WithEvents rs As ADODB.Recordset
versucht. Da bekomme ich dann die Meldung:
Objektvariable oder With-Blockvariable nicht festgelegt mit einem verweis auf:
rs.Open SQL, CN
Fragen dazu:
1. Bei nur As Recordset >> fehlt mir da ein Verweis, wenn ja welche benötige ich dafür
2. Bei AS ADODB.Recordset >> was hat dies nun zu bedeuten. laut doku soll
AS recordset und
AS ADODB.Recordset
dasselbe sein. zu mindestens heisst es, das ADODC nicht vorrangestellt werden muss, da vb so intelligent sei und erkennt dies. ich habe dann wohl ein VB mit weniger IQ oder was stimmt da nicht.
3. Was mache ich sonst falsch oder war der Ansatz richtig oder gibt es eine andere Möglichkeit
RS.Bookmark wird laut Fehlermeldung vom SQL-Server nicht unterstützt, genauso wie apsoluteposition. Mmhhh ich weiss nicht mehr weiter
Ich bedanke mich schon jetzt für Euren zahlreichen Tips, Tricks und Hilfestellungen
Gruß
Antwort 1 von Mick
Hallo,
zu 1:
versuche es mal mit
if not isnull(RS.Fields("a_user")) then
Text1 = RS.Fields("a_user")
etc.
Du versuchst, dem Text1 deb Wert des Asudrucks (RS.Fields("a_user").Attributes = adFldMayBeNull
) zuzuweisen. Wenn das Attribut nicht entsprechend gesetzt ist, dann ergibt es Falsch.
zu 2:
Die Objektvariablen rs muss erst instanziert werden mit:
Set rs = New ADODB.Recordset
rs.Open sql, con, adOpenKeyset, adLockReadOnly
gruss mick
zu 1:
versuche es mal mit
if not isnull(RS.Fields("a_user")) then
Text1 = RS.Fields("a_user")
etc.
Du versuchst, dem Text1 deb Wert des Asudrucks (RS.Fields("a_user").Attributes = adFldMayBeNull
) zuzuweisen. Wenn das Attribut nicht entsprechend gesetzt ist, dann ergibt es Falsch.
zu 2:
Die Objektvariablen rs muss erst instanziert werden mit:
Set rs = New ADODB.Recordset
rs.Open sql, con, adOpenKeyset, adLockReadOnly
gruss mick
Antwort 2 von teccer
Hallo Mick
erst mal danke für die tips, also mit if then, klappt, ist zwar ein bißchen viel tipperei, aber na ja,
was die zweite sache, mein fehler ich hätte noch erwöhnen sollen, das sowohl das objekt RS als auch CN bereits im modul deklariert sind.
punkt 2 ist leider somit immer noch offen. wir sitzen hier echt mit zwei leuten dran. ich habe gehört das es mit DAO gehen soll, aber dann habe ich doch Access-Verhältnisse, da eine permanent-Verbindung besteht.
also auch keine Lösung, wenn Dir/Euch noch was einfällt, dann schreibt es
Gruß
Pierre
erst mal danke für die tips, also mit if then, klappt, ist zwar ein bißchen viel tipperei, aber na ja,
was die zweite sache, mein fehler ich hätte noch erwöhnen sollen, das sowohl das objekt RS als auch CN bereits im modul deklariert sind.
punkt 2 ist leider somit immer noch offen. wir sitzen hier echt mit zwei leuten dran. ich habe gehört das es mit DAO gehen soll, aber dann habe ich doch Access-Verhältnisse, da eine permanent-Verbindung besteht.
also auch keine Lösung, wenn Dir/Euch noch was einfällt, dann schreibt es
Gruß
Pierre