Problem mit oleDbAdaper und Access HILFE!!!
-
Ok Danke
Ich probier es mal aus.
Wofür steht das ---> ? <----
-- Nachtrag --
Es geht noch immer nicht wenn ich bei id = ? mache sagt er mir id kann nicht bearbeitet werden ... und wenn ich id komplett raus nehme also nur in der where klausel drin lasse kommt wieder ein fehler:
Paralelitätsverletzung: Der UpdateCommand hat sich auf 0 der erwarteten 1 Datensätze ausgewirkt. (Rotes Symbol mit !)
Was nu?
PS: Ich weiß wir habe mal im Kurs mit @name blabla gearbeitet hab nur keinen Schimmer mehr ob man das hier einsetzten kann und wofür das steht ...
PS: Mit folgendem Ereignis speicher ich die DB nach änderung:
private: System::Void toolStripButton2_Click(System::Object^ sender, System::EventArgs^ e) { try { this->Validate(); this->kontakteBindingSource->EndEdit(); this->oleDbDataAdapter1->Update(DataSet1->Kontakte); } catch (...) { MessageBox::Show("Beim Speichern ist ein Fehler aufgetreten!\nBitte überprüfen Sie Ihre Eingaben.", "Fehler", MessageBoxButtons::OK, MessageBoxIcon::Error); } }
-
Wieso nimmst Du nicht das Statement, das der Wizzard vorgegeben hat ? (In diesem sind auch noch einige Prüfungen drinne).
Die Fragezeichen stehen für Platzhalter, die später gefüllt werden. Wenn Du einfach in dem SQL Statement rumfriemelst, musst Du auch die Parameter per Hand ändern. Wenn die nicht aufeinander passen, gibt es an sich einfach nur undefiniertes Verhalten.
-
Knuddlbaer schrieb:
Wieso nimmst Du nicht das Statement, das der Wizzard vorgegeben hat ? (In diesem sind auch noch einige Prüfungen drinne).
Die Fragezeichen stehen für Platzhalter, die später gefüllt werden. Wenn Du einfach in dem SQL Statement rumfriemelst, musst Du auch die Parameter per Hand ändern. Wenn die nicht aufeinander passen, gibt es an sich einfach nur undefiniertes Verhalten.
Also irgendwie hab ich das Gefühl, dass du dich kaum damit auskennst... Ich meine meine Frage war doch ganz simple. Ich möchte einfach nur per Hand nun die Update Methode ändern, damit diese funktioniert ... nur wie ??
-
...
-
Ich mein das doch nicht Böse. Nicht so ernst sehen.
Aber ich frag mich immernoch wofür @Name z.B. steht. Wir haben im Kurs mit SQL Server diese Syntax genommen wie z.B.
SELECT Kontakte.* from Kontakte where atid=@kdnr
Nur was ist @ und woher kriegt man das steht das für die Textbox->name kdnr? also das der den Inhalt davon bezieht oder muss @ extra Deklariert werden (vereinbart werden).
-
[flame]
Du Fummelst einfach irgendwo rum und regst Dich dann auf wenn es nicht mehr klappt. Sagt man Dir dann, Du sollst einfach mal durch den Assistent das Statement wieder herstellen lassen, erhält man nur ein "scheinst keine Ahnung zu haben" und "ich will doch einfach nur im SQL Statement rumpfuschen" zurück. (Freie Interpretation).
[/flame]Ich weiß nicht genau wo jetzt Deine Zielsetzung ist oder was Du da jetzt versuchst. Du sitzt vor dem Statement und überlegst, wie da jetzt der Wert von Textbox1 rein kommen soll. An einer Stelle, an der Textbox1 rein garnichts mehr mit dem Statement zu tun hat.
Die Daten werden durch das BindingSource etc. in das DateSet geschrieben. Der UpdateCommand kann mittels den @Name bzw. ? geschichten diese Werte auslesen und setzt damit das angegebene Statement um. Zu dem Statement gehören noch Parameter
Beachte:
Die Syntax für Parameterplatzhalter ist je nach Datenquelle unterschiedlich. Dieses Beispiel zeigt Platzhalter für eine SQL Server-Datenquelle. Verwenden Sie Fragezeichenplatzhalter (?) für System.Data.OleDb-Parameter und System.Data.Odbc-Parameter.
Keiner der hier mitlesenden weiß, was Du in dem Statement rumgefriemelt hast. Der Zustand ist undefiniert. Das einfachste wäre, Du erstellst das Statement noch einmal neu mit dem Wizzard, dann hat man mal einen definierbaren Ausgangszustand.
Schau mal hier, da gibt es einiges an Infos zu dem Thema:
http://msdn2.microsoft.com/de-de/library/bbw6zyha(VS.80).aspx
-
Da muss ich Knuddlbear recht geben.
Warum machst Du Dir das so unnötig schwer.Guckst Du hier...
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfsystemdataidataadapterclassupdatetopic.aspWarum willst Du Dir jetzt noch SQL um die Ohren hauen?
BindingSource macht das alles für Dich.
Und wenn es mal klemmt, bekommst Du eine satte Fehlermeldung auf die Du reagieren kannst.
Das @ bezeichnet allerdings eine Variable in SQL.
-
Und was sollte ich eurer Meinung nach machen?
DataSet neu generieren durch Assitenten ?
-
Als erstes den Adapter neu Konfigurieren. (Ich glaub der Menüpunkt heisst sogar Konfigurieren). Das DataSet musst Du nur neu erstellen, wenn Du da auch die Finger drinn hattest, damit das ganze zusammenpasst.
-
Du kannst den BindingSource auch manuell einbinden.
Toolbox unter Daten.
Dann Verbinde die Eigenschaft "DataSource" mit "dataSet1".Aber das beste wäre, alles nochmal neu in die Form zuziehen.
Schneide die Eingabefelder am besten vorher aus.
Wenn Du die Eingabefelder so in die Form ziehst, werden die mit Nummern neu gekennzeichnet (Anrede = Anrede1 usw.).
Lösche dann alle Steuerelement, dass Du nur noch die blanke Form da hast.
Denk aber daran, dass Du noch die Eingabefelder in der Zwischenablage hast.
Zieh dann die neuen Elemente aus dem Datenquellen-Fenster in die nackte Form.
Danach löscht Du die neuen Eingabefelder (nicht Ausschneiden), damit überschreibst Du die alten Element in der Zwischenablage, einfach markieren und Del oder Entf drücken.
Danach fügst Du die Elemente aus der Zwischenablage wieder ein.
Damit ersparst Du Dir das Aussichten und Gradeziehen der Eingabefelder.Und dann hör auf mit dem rumgefriemel...
-
Wenn die Form ohnehin schon da ist, kann man doch auch einfach die DataBinding Eigenschaft des Controls verwenden.
-
Ihm fehlt doch der TableAdapter, den kriegt er nur, wenn er den ganzen Krempel da wieder rein fummelt.
-
Abgesehen davon: http://i1.fastup.de/show.asp?file=pic2(2).jpg
wäre es bei einer bestehenden Form einfacher, den Adapter einfach zu droppen als die Steuerelemente zu friemeln. Vorallem bei einem großen Projekt (und dem Intellisense) wirst Du Dich von nem Dropen des Adapters gegenüber dem gefriemel mit den Steuerelementen anfreunden
Es führen viele Wege nach Rom, welcher der passende ist, muss jeder in seiner Situation selbst herauspusseln
)
-
Das ist so nicht richtig Knuddlbaer.
Da diese Elemente durch Drag&Drop in das Formular gezogen und Abgelegt werden.
Sprich…
Der BindingNavigator, TableAdapter, BindingSource und DataSet wird von Visual Studio 2005 eingefügt und kann nach Bedarf bearbeitet oder entfernt werden.
Der einfachste Weg wäre, das ganze Geraffel von der Forum zu löschen, alles, auch die Werkzeugleiste, und dann das ganze wieder in das Formular per Drag&Drop zuziehen.
-
Ich verstehe immer noch nicht, warum man nicht einfach, wenn der Adapter fehlt, man nicht einfach den Adapter neu dropt und fertig. Wenn ein paar ZIegel auf dem Dach kaputt sind, reiss ich auch nicht das ganze Haus ab.
Das erkläre jetzt mal genauer, vorallem definiere mal "TableAdapter", nicht das
wir aneinander vorbei reden![edit]
Ok, ich hab mal ein wenig gelesen und den TableAdapter mit DataAdapter durcheinander gewürfelt.
Der TableAdapter ist ein Konstrukt, welches vom Designer angelegt wird. Warum der nun fehlen soll weiß ich nicht. Um das zu "Reparieren" sollte es ausreichen, den DataAdapter neu zu Konfigurieren und bei Bedarf das DataSet neu zu generieren. Der TableAdapter sollte in diesen Schritten vom Designer gepflegt werden.
Es erschliesst sich mir nicht, warum ich dann die Steuerelemente sowie BindingSource, DataView etc. anfassen soll. Wenn die Steuerelemente an das BindingSource oder DataView gebunden sind, muss im schlimmsten Fall bei diesen zwei Controls lediglich die DataSource neu eingestellt werden.
-
Ich arbeite nun mit den Assistenten wobei die oft mist machen, aber den mist von dem Assitenten auszubaden ist einfacher als sich 1000 mal am Kopf zu kratzen und immer noch nicht zur Lösung zur kommen