Zum Inhalt springen

Loewchen0507

Mitglieder
  • Gesamte Inhalte

    45
  • Benutzer seit

  • Letzter Besuch

  1. Hi an alle, also zuerstmal vielen dank für die ganzen Anregungen... ich habe die Lösung gefunden... und entschuldigt die späte Antwort... aber mich hatte zwischenzeitlich die Sommergrippe erwischt Wie bin ich vorgegangen: ich habe mir eine neue Applikation gebaut und ein dort per Knopfklick das Alter Table Statement ausgeführt und es funktionierte... dann bin ich auf die Suche gegangen... wo liegt der unterschied... der Rechner ist der Gleiche und die Installationen damit auch... also konnte es nur an den beiden Applikationen liegen... ja und da hatte ich auch schon den größten unterschied... das eine ist eine Applikation und das andere ein Dienst... dann irgendwann kam ich mal auf die Idee die Anmeldungen am SQL Server zu überprüfen und da war es auch schon... Ich bin an meinem Rechner immer als User einer Domain angemeldet... mein Service allerdings hat sich immer mit local angemeldet... und da war es.. ich habe dann für den Service die Anmeldungen geändert und siehe da, es funktioniert... Mein lokaler Benutzer hatte keine Vollzugriffsrechte auf die mdb und durfte daher nicht ändern, während ich mit dem Benutzer einer Domain diese Rechte besaß... dumm dumm dumm ... :upps das Leben kann so einfach sein... Also zusammenfassend gesagt lag es an den Rechten des Benutzers mit denen sich der Dienst angemeldet hat... ändert man die Anmeldedaten oder die Rechte des Benutzers funktioniert alles einwandfrei... Trotzdem danke an Euch alle für Eure Unterstützung und ich freue mich shcon auf meine nächste Aufgabe ("Problem") die ich mit Euch zusammen erörtern darf. LG Loewchen
  2. Hi, geöffnet ist die Datenbank nur von meinem Programm... den Multiuserzugriff??? Wo wird der denn ein bzw. ausgeschaltet??? Gruß Loewchen
  3. das Problem war, dass ich vor dem Open das gemacht habe... schussligkeit aber jetzt bekomme ich diese Fehlermeldung: kein installierbares ISAM gefunden wenn ich den Code benutze: CobraConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Properties.CoWi.Default.CobraDB + ";Exclusive=1;"; CobraConn = new OleDbConnection(CobraConnStr); CobraAlterCommand = new OleDbCommand("ALTER TABLE addresses ADD COLUMN mesoprim TEXT(50);", CobraConn); CobraAlterCommand.CommandType = CommandType.Text; CobraConn.Open(); CobraAlterCommand.Connection.ChangeDatabase("DemoCoWiTest.mdb"); CobraAlterCommand.ExecuteNonQuery(); mega komisch... lasse ich die zeile CobraAlterCommand.Connection.ChangeDatabase("DemoCoWiTest.mdb"); weg, dann kommt wieder: Datenbank schreibgeschützt. LG Loewchen
  4. Hi, genau das ALTER TABLE Statement das ich im Code habe läuft in der Access.mdb Ich habe auch schon versucht: CobraAlterCommand.Connection.ChangeDatabase("DemoCoWiTest.mdb"); und: CobraConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Properties.CoWi.Default.CobraDB + ";Exclusive=1;"; also mit Exclusive=1; aber irgendwie klappt das nicht. LG Loewchen
  5. Hi, ich hoffe Ihr könnt mir helfen. Ich möchte gerne während der Laufzeit meines Programmes eine Änderung in einer Tabelle einer Access Datenbank vornehmen. Dabei bin ich wie folgt vorgegangen: 1. Verbindung zur Datenbank herstellen 2. AlterTable Statement Meine Umsetzung wie folgt: OleDbConnection CobraConn; CobraConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Properties.CoWi.Default.CobraDB; CobraConn = new OleDbConnection(CobraConnStr); CobraConn.Open(); CobraAlterCommand = new OleDbCommand("ALTER TABLE addresses ADD COLUMN mesoprim TEXT(50);", CobraConn); CobraAlterCommand.CommandType = CommandType.Text; CobraAlterCommand.ExecuteNonQuery(); Vielleicht gehe ich die ganze Sache ja auch komplett falsch an??? Dennoch hoffe ich, dass Ihr mir helfen könnt. LG Loewchen
  6. Debuggen geht leider nicht. Aber von dem was ich bisher an Ausgaben sehe gibt es eigentlich nur eine Möglichkeit. Bei der Herstellung der Verbindung zum SQL Server. Die Daten (Server, Datenbank, User und Passwort) sind richtig. Mit den gleichen Daten kann ich mich von allen Workstations auf den SQL Server einloggen. Was ist wenn auf der Workstation kein SQL Server installiert ist und nur der ODBC Treiber... sollte doch trotzdem funktionieren oder??? Was muss alles auf der Workstation installiert sein? - .NET Framework 2.0 - ODBC Treiber oder benötige ich noch mehr? LG Loewchen
  7. Hi, der Fehler tritt immer auf, aber er tritt nur an der einen Workstation auf. Eine detailliertere Fehlerbeschreibung gibt es leider nicht... LG Loewchen
  8. Hi Leute, Ich habe in C# ein kleines Progrämmchen geschrieben welches eine DatenbankVerbindung zu einem SQLServer (2000 oder 2005) aufbaut. Dort ein paar Änderungen vornimmt und das war's auch schon. Läuft auf X-Rechnern wunderbar. Bis zum heutigem Zeitpunkt. Auch ein WindowsXP Rechner mit dem gleichen ODBC Treiber, versucht auf den Server zuzugreifen und folgende Fehlermeldung wird angezeigt: System.Collections.ListDictionaryInternal Void HandleError(System.Data.Odbc.OdbcHandle, RetCode) Die Rechte des Benutzers auf dem Server habe ich schon überprüft. Alles wunderbar. Die Anmeldung am SQLServer eroflgt grundsätzlich mit dem sa. Ich hoffe jemand von Euch kann mir weiter helfen denn durch Google bin ich nicht schlauer geworden. Warum tritt der Fehler hier auf und wie kann ich Ihn beheben? LG Loewchen
  9. Hi, Falls es jemanden interessiert poste ich hier mal ein stückchen Code von mir. Vielleicht kann es ja mal jemand gebrauchen. Falls jemand einen Kommentar dazu abgeben möchte, Verbesserungsvorschläge hat oder oder oder dann immer her damit... ich bin noch am lernen und bin für jede konstruktive Kritik zu haben. try { // Deklaration Boolean Update = false; String UpdateStatement = ""; String SQLConnStr = ""; String AccessConStr = ""; OdbcConnection SQLconn; OleDbConnection AccessConn; OdbcCommand SQLCommand; OleDbCommand AccessCommand; OdbcDataReader SQLreader; OleDbDataReader AccessReader; int Richtung = 0; // Initialisierung // SQL Connectionstring und Connection SQLConnStr = "Driver={SQL Server};Server=" + Properties.CoWi.Default.SQLServer + ";Database=" + Properties.CoWi.Default.SQLDB + ";UID=" + Properties.CoWi.Default.SqlUser + ";PWD=" + Properties.CoWi.Default.SQLPWD + ";"; SQLconn = new OdbcConnection(SQLConnStr); // AccessConnectionString und Connection AccessConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Properties.CoWi.Default.AccesDB; AccessConn = new OleDbConnection(AccessConStr); // Richtung / 1 = ACCESS -> SQL / 2 = SQL -> ACCESS Richtung = Properties.CoWi.Default.Richtung; // Verbindungsaufbau zum SQL Server SQLconn.Open(); // Verbindung öffnen // Verbindungsaufbau zur Access Datenbank AccessConn.Open(); // Connection öffnen if (SQLconn.State == ConnectionState.Open && AccessConn.State == ConnectionState.Open) { if (Richtung == 1) // MDB -> SQL { // Command zum auslesen und vergleichen AccessCommand = new OleDbCommand("Select <Spalten> from <Tabelle>", AccessConn); AccessCommand.CommandType = CommandType.Text; // MDB Reader AccessReader = AccessCommand.ExecuteReader(); do { // Command zum auslesen und vergleichen (WinLine) // Select Anweisung anpassen auf EINEN DATENSATZ SQLCommand = new OdbcCommand("Select <Spalten> From <Tabelle>", SQLconn); SQLCommand.CommandType = CommandType.Text; // SQL Reader SQLreader = SQLCommand.ExecuteReader(); if (SQLreader.HasRows) // Datensatz vorhanden { //vergleiche Datensätze for (int i = 0; i < 20; i++) { if (AccessReader[i].ToString() != SQLreader[i].ToString()) { UpdateStatement = UpdateStatement + "<Spalte> = <Wert>"; Update = true; } } if (Update) { SQLCommand.CommandText = "Update <Tabelle> SET " + UpdateStatement + " WHERE <Bedingung>;"; SQLCommand.ExecuteNonQuery(); } } else // Datensatz ist nicht vorhanden { // Füge Datensatz hinzu // SQL anpassen SQLCommand.CommandText = "INSERT INTO <Tabelle>(Spalte1, Spalte2, ... , SpalteN)" + "VALUES (<Wert1>, <Wert2>, ... , WertN);"; SQLCommand.ExecuteNonQuery(); } // SQLReader Schließen SQLreader.Close(); } while (AccessReader.NextResult()); // AccessReader Schließen AccessReader.Close(); } else // SQL -> MDB { } } else { EventLog myEventLog = new EventLog(); myEventLog.Source = "CoWiSource"; if (SQLconn.State == ConnectionState.Open) { myEventLog.WriteEntry("Verbindung zur AccessDatenbank konnte nicht aufgebaut werden"); } else { myEventLog.WriteEntry("Verbindung zur SQLServerDatenbank konnte nicht aufgebaut werden"); } } SQLconn.Close(); AccessConn.Close(); } catch (Exception ex) { // Anweisungen DateTime Time; Time = DateTime.Now; string Project = ""; StreamWriter writer; MessageBox.Show("Ein Fehler ist aufgetreten. Bitte überprüfen Sie Ihre Einstellungen in der Konfiguration. \n" + ex.Data.ToString() + "\n" + ex.Message.ToString() + "\n" + ex.TargetSite.ToString(), "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2); Project = Path.GetFullPath("CoWi-Dienst.exe"); Project = Project.Substring(0, Project.Length - 15) + "Exception.txt"; // Ist datei nicht vorhanden wird sie erzeugt und gefüllt if (!File.Exists(Project)) { // Datei wird erzeugt using (StreamWriter sw = File.CreateText(Project)) { sw.WriteLine(Time + " Exception"); sw.WriteLine(Time + " " + ex.Data.ToString()); sw.WriteLine(Time + " " + ex.Message.ToString()); sw.WriteLine(Time + " " + ex.Source.ToString()); sw.WriteLine(Time + " " + ex.TargetSite.ToString()); sw.Close(); } } // Ist sie vorhanden wird der Inhalt der Datei gesichert (helper) // und in die neue Datei geschrieben // dann erst wird alles neue angefügt else { String helper = ""; helper = File.ReadAllText(Project); writer = File.CreateText(Project); writer.WriteLine(helper); writer.WriteLine(Time + " Exception"); writer.WriteLine(Time + " " + ex.Data.ToString()); writer.WriteLine(Time + " " + ex.Message.ToString()); writer.WriteLine(Time + " " + ex.Source.ToString()); writer.WriteLine(Time + " " + ex.TargetSite.ToString()); writer.Close(); } } finally { // Abschlussarbeiten } } LG Loewchen
  10. Hi, es handelt sich um ca. 10.000 Adress-Datensätze. Die Tabellen sind ähnlich aber nicht identisch. Ich habe mich gestern noch ein bisschen belesen zu Datasets. Habe etwas über Merge gelesen, was bei mir aber nicht in Frage kommt, da ich zwar mit ein paar geschickten Select Abfragen die Tabellen ähnlich gestalten kann aber zumindest den Key bekomme ich nicht identisch hin. Ich habe noch etwas gelesen über Datasets die man als XML im Arbeitsspeicher oder auch auf dem Rechner sichern kann um dann damit weiter arbeiten zu können. Nur bei 10.000 Datensätzen ist die Frage was hier wirklich sinnvoll ist. Bei dieser Menge an Daten möchte ich auch nicht den ersten Datensatz nehmen dann die andere Tabelle durchgehen und gucken bis ich den passenden Datensatz gefunden habe, ihn dann vergleichen und gegebenenfalls dann ändern oder hinzufügen. Das dauert doch viel zu lang. Ich bin mit meiner Planung hier noch nicht wirklich zufrieden. Hoffe Ihr habt hier noch ein paar super Ideen. LG Loewchen
  11. Hi, Von SQL nach MDB OK??? Aber von MDB nach SQL??? außerdem habe ich nicht die Möglichkeit auf dem SQLServer solche Änderungen vorzunehmen. Ich will es per Code machen. Gruß Loewchen
  12. Ich schon wieder, ist eigentlich nur eine kurze Frage. Ich möchte aus zwei Datenbanken die Daten vergleichen bzw. aktuallisieren. Nun meine Frage: Welche der folgenden Varianten ist schneller? 1. Die Daten in per Dataset speichern, vergleichen und nur die unterschiedlichen Datensätze aktualisieren? 2. Die Daten nicht in ein Dataset laden sondern direkt vergleichen und den jeweiligen Datensatz aktualisieren? 2. oder ein SQL Statement für die Aktualisierung aller Datensätze los zu schicken, egal ob unterschiedlich oder nicht? Freue mich schon auf antworten. LG Loewchen
  13. Hi an alle, Also die Sache mit dem GUI werde ich wie folgt lösen: Ich schreibe ein extra Projekt welches die XML Datei editiert. Das ist das einfachste und schnellste und funktioniert sogar. Sobald ich mit dem Dienst fertig bin werde ich etwas zusammenschreiben. Eine Art Leitfaden für das erstellen von Diensten und einer entsprechenden KonfigurationsApplication. Vielleicht hilft das hier jemandem weiter. LG Loewchen
  14. Hi, ich habe herausgefunden woran es lag. Es waren zwei Probleme. Zuerst war es nur das Problem, dass ich einen Netzwerkpfad angegeben habe: S:\test\test\test.mdb Das zweite Problem ist dann erst während der ganzen Änderungen entstanden. Ich hatte den connectionString der Access DB erweitert mit: + ";Mode=ReadWrite;Persist Security Info=False" in der Windows Anwendung war das an dieser Stelle auch kein Problem. Im Dienst jedoch schon. Nun stellen Sich mir nur noch zwei Fragen: 1. Warum werden keine Fehlermeldungen geschmissen, bzw. kein Fehlerprotokoll geschrieben wie in der Fehlerbehandlung zu sehen ist? 2. Warum funktioniert die Connection mit dem angefügten String (siehe oben) bei einer WindowsAnwendung einwandfrei und bei dem WindowsDienst nicht? Liebe Grüße Loewchen PS.: und danke für Deine Bemühungen.
  15. Oh ein Spezi, *freu* also mir geht es darum einen dienst laufen zu haben, der inständig zwischen der WinLine und Cobra bestimmte Adressdaten abgleicht, falls Änderung in dem einen oder in dem anderen Programm vorgenommen wurde. Die Richtung kann Konfiguriert werden und Cobra kann auch als MDB laufen... leider... Wie ich das mit dem GUI umsetze weiß ich inzwischen schon. Momentan ist mein Problem eher die Datenbankverbindung zur Access Datenbank, während das in einer normalen Windows Applikation funktioniert läuft der gleiche Code in als Dienst nicht mehr... *schulterzuck* bin dem ganzen n och nicht auf die Spur gekommen... LG Loewchen

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...