Laden...
C
Capi myCSharp.de - Member
Freizeitentwickler... Bräunlingen, Schwarzwald Dabei seit 06.02.2004 202 Beiträge
Benutzerbeschreibung

Forenbeiträge von Capi Ingesamt 202 Beiträge

13.01.2005 - 11:16 Uhr

Hallo,

wenn ich mich nicht irre, dann übernimmt der PC (Betriebssystem) das gedöns mit Bluetooth. D.h. er erkennt, das Bluetooth existiert und stellt die verbindung mit dem Gerät her. Du kannst bei Bluetooth Geräten angeben, was für einen Port sie verwenden sollen also kannst du ihnen z.B. ComPort 6 zuweisen über die alles ablaufen soll. Somit kannst du dann über diesen Port deine Daten schicken.

Bei WLAN musst du dich auch nicht darum kümmern, da gibst du einfach deine Zieladresse ein z.B. \Server\MeinOffice... und er weiß das er da über WLAN gehen muss.

Sodele ich hoffe ich habe nichts falsches geschrieben. Ansonsten bitte ich um korrekturhinweise falls ich was total flasches geschrieben habe.

Mfg
Andi

12.01.2005 - 08:16 Uhr

Du kannst die Location der Form angeben.


this.Location = new Point(int x, int y);

Vorher kannst du ja ermitteln, wie groß die Bildschirmauflösung ist und kannst so die Position immer genau setzen jeh nach Bildschirmauflösung.


SystemInformation.PrimaryMonitorSize.Width

Mfg
Andi

09.01.2005 - 11:49 Uhr

Hi,
ich lese von einem externen Gerät Daten aus. Solange dieser Datenaustausch stattfindet, wird eine Form Modal eingeblendet, die nur anzeigt, das der Datenaustausch läuft und die Befehle und die Antwort dazu anzeigt. Die Routine, die beim Anzeigen des Dialogs durchläuft lagere ich in einen Thread aus den ich vorher starte, bevor ich den Dialog Modal aufrufe

Mein Problem ist jetzt, das irgendwann, die Fehlermeldung: Es wurde kein Objektverweis gesetzt kommt und zwar bei der im Quellcode s.u. erscheint. Dabei rufe ich hierbei ja nur den Dialog auf und er öffnet sich auch und es läuft alles einwandfrei, bis es nach unbestimmter (zufälliger) zeit dieser Fehler auftritt.



mydlg = new dlgKommunikation();
//Thread für Kommunikation anlegen
ThreadKommunikation = new Thread(new ThreadStart(Datenabgleich));
//setzen Variable, dass Datenabgleich stattfindet und somit keine Meldung wegen Kontrollintervall kommt

bDatenabgleich = true;
ThreadKommunikation.Start();

//um zu verhindern, dass die Form geschlossen wird
mydlg.SetGetbClose = false;
mydlg.SetGetsLabelText= "Datenabgleich läuft...";
mydlg.ShowDialog();  --> FEHLER (wurde kein Objektverweis gesetzt)


Weiss jemand warum das passiert?

Bin für jeden Vorschlag dankbar

MFG
Andi

07.01.2005 - 14:48 Uhr

Hi,

ich habe einen Hashwert decryptet: die Werte aus data1ToHash ist ein byte Array aus einem String



byte[] hashvalue1 = ((HashAlgorithm) CryptoConfig.CreateFromName("MD5")).ComputeHash(data1ToHash);

jetzt weiss ich aber leider nicht, wie ich das wieder zurückwandeln kann? Also wieder in ein byteArray ohne verschlüsselung.

Mfg
andi

05.01.2005 - 11:00 Uhr

Hi,

in meinem Programm soll es einen Bereich geben, in dem nur Administratoren zugriffsrechte haben.

Hier habe ich jetzt also eine Passwortabfrage eingebaut, in dem das Passwort abgefragt wird.

Jetzt ist meine Frage wie kann ich denn das Passwort denn jetzt am besten Speichern? damit nicht jeder dieses auslesen kann?

Also das Passwort in:

 - Datei  
 - Datenbank  
 - ...  

was für Möglichkeiten gibt es hierzu?

Eine andere Frage, wie kann man verhindern, dass nicht jeder auf eine Access Datenbank zugreifen kann. Das heisst sie öffnen und editieren.

Mfg
Andi

05.01.2005 - 09:40 Uhr

Hallo,

ich starte ein Programm mit StartInfoArguments. Ich möchte hier die Verbindungszeichenfolge zu einer Datenbank angeben.

Mein Problem ist aber jetzt, sobald im String ein Leerzeichen kommt, lässt er ab dieser Position den rest weg und schickt nur einen Bruchteil des strings zum aufgerufenen Programm;


myProcess.StartInfo.Arguments = "Hier malz umT est";
myProcess.Start();

beim aufgerufenen Programm kommt hier nur Hier an anstatt Hier malz umT est.

Weiss jemand wie man das ändern kann?

Ich könnte natürlich die Leerzeichen mit _ füllen und im aufrufenden Programm wieder entfernen aber vielleicht geht es ja leichter

Vielen dank für eure Antworten

Andi

04.01.2005 - 14:07 Uhr

Hi ,

ich möchte beim SaveFile Dialog, das der Dateiname nicht verändert werden kann.

Das heisst ich gebe einen dateinamen vor und dieser kann nicht geändert werden.

Weiss jemand wie man das hinbekommt?

THX
andi

03.01.2005 - 16:59 Uhr

Hi Kabaal,

hab das mit dem Ballon gemacht. THX für die Idee

Andi

03.01.2005 - 16:43 Uhr

Hi,

wenn dein PrimaryID eine Zahl ist dann kannst du eine SELECT Abfrage machen auf den Größten wert und diesen dann einfach um 1 erhöhen:


DataRow[] myDataRow = dtsGesamt.Tables["Projekt"].Select("","Projektnummer DESC");			
//ersten Eintrag holen da diese die größte aktuelle Projektnummer ist
if (myDataRow.Length !=0)
{
   long lProjektnummer = Convert.ToInt64( myDataRow[0]["Projektnummer"]);
   //Projektnummer um 1 erhöhen
   lProjektnummer++;
   //string zuweisen
   sProjektnummer = lProjektnummer.ToString();
}

Mfg
Andi

30.12.2004 - 11:01 Uhr

Hi,

hab die Lösung gefunden. Hab die DataRow falsch gelöscht.

Man muss sie so löschen (falls jemand das gleiche Problem hat):


for (int i=0; i < myRow2.Length; i++)
{
     myRow2[i].Delete();
}

Mfg
Andi

30.12.2004 - 09:33 Uhr

Hi,

das ewige leid mit dem DataAdapter und dem Update Befehl, er will mal wieder nicht funktionieren.

Ich löschen alle Daten im DataSet die sind auch weg und will dann diese Veränderungen in meine DB zurückschreiben. doch leider macht er das nicht.

Hier mal der Code dazu:


//nachdem das Projekt gesichert wurde, das Projekt löschen aus Phasendauer
DataRow[] myRow2 = dataSetGesamt.Tables["Phasendauer"].Select "Projektnummer = '" + ComboBoxProjekte.SelectedValue.ToString() + "'");
for (int i=0; i < myRow2.Length; i++)
{
					dataSetGesamt.Tables["Phasendauer"].Rows.Remove(myRow2[i]);
}
oleDbDataAdapterPhasendauer.Update(dataSetGesamt,"Phasendauer");
dataSetGesamt.Tables["Phasendauer"].AcceptChanges();
//jetzt Projekt aus Projektliste löschen
DataRow[] myRow3 = dataSetGesamt.Tables["Projekt"].Select("Projektnummer = '" + comboBoxProjekte.SelectedValue.ToString() +"'");
if (myRow3.Length != 0)
{
dataSetGesamt.Tables["Projekt"].Rows.Remove(myRow3[0]);
}
oleDbDataAdapterProjekte.Update(dataSetGesamt,"Projekt");
dataSetGesamt.Tables["Projekt"].AcceptChanges();

Thx für eure Hilfe

Andi

29.12.2004 - 14:07 Uhr

Hi,

habs selber herausgefunden 🙂

falls jemand mal das gleiche Problem hat (hab für die Lösung eine Stunde gesucht 😦)

den SelectedIndex auf -1 setzen:

comboBoxProjekte.SelectedIndex = -1;

An den kleinsten Sachen hält man sich am längsten auf

Mfg
Andi

29.12.2004 - 13:41 Uhr

Hi,

warum willst du Informationen denn in ein DataSet speichern? würde nicht auch eine ArrayListe funktionieren? Was willst du denn mit den Daten machen?

Wenn du ein DataSet verwendest, muss du ihm ein Schema übergeben und hier ist natürlich die Frage ob es sinnvoll ist, für jedes deiner Controlls eine Spalte zu definieren und dann den Wert zu speichern.

Ich warte jetzt mal auf ein paar mehr Infos von dir, vielleicht kann ich dir dann eine bessere Antwort geben

Mfg
Andi

29.12.2004 - 13:36 Uhr

Hi,

hab eine Combobox auf die ich eine DataSource (DataSet) gesetzt habe. Im DataSet stehen Projekte drin:

-Verwaltung
-Programmierung usw.

die Datenbindung funktioniert einwandfrei, aber der erste Eintrag in der Combobox ist aber immer ein Projekt. Ich möchte aber gerne, das der 1. Eintrag leer ist und der Benutzer dann die Einträge auswählen muss. Ich habe schon versucht den Text zu vergeben aber der wird überschrieben.

Hoff dat weiss jemand wie man das hinbekommt. - oder sollte man in diesem Fall eine dataTable nehmen?

Mfg
Andi

29.12.2004 - 13:00 Uhr

Hi Leute,

also nochmal mein Problem zur genauen verdeutlichung.

Habe ein Programm das als TrayIcon läuft -> also im Hintergrund und aufrufbar über TrayIcon. Hier können dann Projekte usw. ausgewählt werden, damit mitprotokolliert wird, was der Mitarbeiter gerade macht.

Das Programm ermöglicht es also den Tagesablauf eine Mitarbeiters mitzuprotokollieren.
Wenn der Mitarbeiter arbeitet aber kein Projekt ausgewählt hat, dann ist das sozusagen Fehlzeit für den Mitarbeiter und er wird aufgefordert, ein Projekt auszuwählen. So und hier kommt nun mein Problem, ich möchte, das ein Fenster(Form) über der Taskleiste erscheint und hier der Spruch steht "Bitte ein Projekt auswählen". Das ganze funktioniert auch. Ich habe hierzu einen Timer genommen der alle 10 Minuten überprüft ob ein Projekt ausgewählt ist, wenn nicht erscheint die Meldung. So wenn nun diese Meldung erscheint, dann wird der Focus ja auf diese neue Form gesetzt und genau das will ich nicht. Und zwar weil er gerade z.b. in Word arbeitet er den Focus verliert, und er somit gestört wird.
Mein Programm läuft die ganze Zeit, solange der PC an ist.

Ich brauche also eine Form, die aufpoppt aber keinen Focus erhält.
Diese Funktionalität mit aufpoppen kann z.B. Outlook 2003 wenn hier eine neue Email hereinflattert, dann wird die Email kurz im Bildschirm eingeblendet. Und hierbei wird der focus nicht auf diese neu erscheinende Form gesetzt.

Hoffe ihr wisst jetzt genau was mein Problem ist. (Da hier anscheinend ein paar unklarheiten bestehen) 😁

Mfg
Andi

29.12.2004 - 09:38 Uhr

Hi

ich nochmal. Hab das jetzt nochmal getestet und leider verliere ich immer noch den Focus(). 🙁

Ich frage mich echt wie das Outlook macht?

Hat jemand noch ne Idee?

Mfg
Andi

29.12.2004 - 08:57 Uhr

Hi,

ich weiss gerade nicht wie ich das Umsetzen soll? Vielleicht weiß jemand ja wie.

Ich habe eine Tabelle mit diesen Einträgen:

ID; Bemerkungen; Datum; Uhrzeit; Dauer; Mitarbeiternummer;Phasennumer; Projektnummer

ich möchte nun, diese Tabelle in ein DataGrid laden und hier die Daten verändern können. Dies wäre ja auch kein Problem (DataSet füllen und an DataGrid binden) doch möchte ich nicht alle Spalten haben sondern nur Datum; Uhrzeit; Dauer; Bemerkungen. Diese Spalten sollen also im DataGrid angezeigt werden, die anderen nicht.

Wie könnte man das machen?

Mfg
Andi

28.12.2004 - 16:28 Uhr

Vielen Dank an alle aber vorallem an Xqgene genau das was ich gebraucht habe =)

Mfg
Andi

28.12.2004 - 10:36 Uhr

Hi danke für die Antwort,

das Problem dabei ist aber, dass der benutzer z.b. gerade in Word arbeitet und auf dieses Programm kann ich ja kein this. setzen.
Ich möchte also, das der Benutzer nicht gestört wird, wenn er gerade in Word schreibt oder sonstiges am PC tut. Mein Programm läuft sozusagen nur im Hintergrund und soll sich durch die Benachrichtigung auf sich aufmerksam machen, damit der Benutzer weiss, das er gerade kein Projekt ausgewählt hat (das Programm dient dazu, eine simultane Projekterfassung zu gewährleisten).

Mfg
Andi

27.12.2004 - 16:33 Uhr

Hi Leute,

ich versuche eine Form anzeigen zu lassen, die aber keinen Focus erhalten soll. Und zwar wie bei Outlook hier erscheint ja so eine Form wenn eine neue Email eintrifft. Und hierbei wird der Focus auch nicht auf diese sich öffnende Form geswitcht.

Zur besseren Erklärung, ich möchte alle paar minuten ein kleines Fenster einblenden, das mir ein paar Infos anzeigt aber nur so das man es sieht und nicht, dasss der Focus auf die Form fällt.

Hoffe jemand weiss wie das geht? Ich hab die Form transparent bekommen und alles nur das mit dem Focus bekomm ich nicht.

Mfg
Andi

12.12.2004 - 19:55 Uhr

Sodele hab es jetzt herausgefunden.

Vielen Dank Sunny habe im anderen Post die Antwort gefunden die du gepostet hast. Und jetzt wusste ich was ich falsch gemacht habe.


private void buttonSave_Click(object sender, System.EventArgs e)
		{
			try
			{
				this.BindingContext[dtsAdresse,"Adresse"].EndCurrentEdit();
				this.oleDbDataAdapterAdresse.Update([B]dtsAdresse.Tables[0]);[/B]
				this.Close();
			}
			catch (Exception ex)
			{
				MessageBox.Show("Fehler beim speicher: " + ex.Message,"Fehler",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}

Hatte vergessen die Tabelle anzugeben 🤔

THX für die Hilfe

Andi

09.12.2004 - 12:26 Uhr

Hi,

ich hab das jetzt mal umgedreht:


private void buttonSave_Click(object sender, System.EventArgs e)
		{
			try
			{
				this.BindingContext[dtsAdresse,"Adresse"].EndCurrentEdit();
				this.oleDbDataAdapterAdresse.Update(dtsAdresse);
				this.Close();
			}
			catch (Exception ex)
			{
				MessageBox.Show("Fehler beim speicher: " + ex.Message,"Fehler",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
		#endregion

aber leider funktioniert es immer noch nicht.

Muss ich vielleicht irgend etwas besonderes noch angegeben?

Mfg
Andi

08.12.2004 - 18:33 Uhr

Hi Sunny hast du vielleicht die Möglichkeit mal zu schauen wie ihr das hinbekommen habt? Da es leider nicht an dem .EndCurrent... liegt.
🙁
Mfg
Andi

08.12.2004 - 16:15 Uhr

Hi,
ich versuche ein Formular zu erstellen, in dem Adressdaten eingegeben werden können.

Hierzu habe ich eine Form angelegt, in die man alle Daten Strasse, Ort, PLZ usw. eingeben kann. Ich habe diese Felder mit einen BindingContext belegt damit die bereits gespeicherten Werte angezeigt werden (das klappt auch) wenn ich aber jetzt versuche ich die Daten zu ändern und zurückzuspeichern dann funktioniert das aber nicht.

Ich übergebe das DataSet und den DataAdapter der Form im Konstruktor:



public frmFirma(DataSet dtsAdresse, OleDbDataAdapter oDataAdapter)
		{
			InitializeComponent();
			this.dtsAdresse = dtsAdresse;
			this.oleDbDataAdapterAdresse = oDataAdapter;
			
		}


Im Load Event lade fülle ich das dataSet und rufe die DataBinding Methode auf:


private void frmFirma_Load(object sender, System.EventArgs e)
		{
			dtsAdresse = new DataSet("Adressen");
			oleDbDataAdapterAdresse.Fill(dtsAdresse);
			DataBinding();	
		}

Die DataBinding Methode sieht so aus:



private void DataBinding()
		{
			textBoxFirma.DataBindings.Clear();
			textBoxFirma.DataBindings.Add("Text",this.dtsAdresse.Tables["Adresse"],"Firma");
			textBoxAbteilung.DataBindings.Clear();
			textBoxAbteilung.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Abteilung");
			textBoxStrasse.DataBindings.Clear();
			textBoxStrasse.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Strasse");
			textBoxPlz.DataBindings.Clear();
			textBoxPlz.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Plz");
			textBoxOrt.DataBindings.Clear();
			textBoxOrt.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Ort");
			textBoxLand.DataBindings.Clear();
			textBoxLand.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Land");
			textBoxTel.DataBindings.Clear();
			textBoxTel.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Telefon");
			textBoxFax.DataBindings.Clear();
			textBoxFax.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Fax");
			textBoxWebSite.DataBindings.Clear();
			textBoxWebSite.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Internetadresse");
			textBoxEmail.DataBindings.Clear();
			textBoxEmail.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Email");
		}

Danach soll die Veränderung dann gespeichert werden-



private void buttonSave_Click(object sender, System.EventArgs e)
		{
			try
			{
				this.oleDbDataAdapterAdresse.Update(dtsAdresse);
				this.BindingContext[dtsAdresse,"Adresse"].EndCurrentEdit();
				
				this.Close();
			}
			catch (Exception ex)
			{
				MessageBox.Show("Fehler beim speichern: " + ex.Message,"Fehler",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}

So nun speichert er die Daten aber nicht in die Datenbank.

Es ist eine ACCESS 2000 Datenbank mit der Tabelle Adresse und den Feldern wie im DataSet.

Hoffe jemand weiss was ich falsch mache. Es ist zum aus der Haut fahren.

Mfg
Andi

11.10.2004 - 17:49 Uhr

Hi habs gefunden woran es lag.

Also für jeden der mal das gleiche Problem hat. Er muss vor dem zurückspeichern zuerst das BindingContext beenden.


this.BindingContext[dtsAdresse,"Adresse"].EndCurrentEdit();
oleDbDataAdapterAdresse.Update(dtsAdresse);

Mfg
Andi

10.10.2004 - 23:53 Uhr

Hi,
vielen dank für deine Antwort.

Das Problem ist nur, dass es keine Fehlermeldung gibt. Er schreibt einfach den eingegeben Wert in der Textbox nicht in die Datenbank. Wenn ich den werden fest übergebe dann trägt er den Wert ein. Warum er das auch macht?

Werde dann mal das mit dem parameter probieren.

Mfg
Andi

10.10.2004 - 15:22 Uhr

Hi,

ich versuche eine Dataset zurück zu meiner Accessdatenbank zu schreiben.


dtsAdresse.Tables["Adresse"].Rows[0]["Firma"] = textBoxFirma.Text.ToString();
try
			{
				oleDbDataAdapterAdresse.Update(dtsAdresse);		
			}
			catch
			{
				MessageBox.Show("Fehler");
			}

das funktioniert auch solange ich dem DataSet Adresse den Wert für Firma fest zuweise also:

dtsAdresse.Tables["Adresse"].Rows[0]["Firma"] = "Test";

wenn ich es aber wie oben mache dann funktioniert es nicht.

Ich habe das DataSet per Databinding an die TextBoxfirma geknüpft.

textBoxFirma.DataBindings.Add("TEXT",this.dtsAdresse.Tables["Adresse"],"Firma");

Ich könnte mir vorstellen, dass er noch den alten Wert drinstehen hat obwohl ich etwas neues in die Textbox eingegeben habe.

Weiss jemand warum das so ist?

Mfg
Andi

23.09.2004 - 14:34 Uhr

Hi,

erstmal danke für deine Antwort. 😁

ich möchte einfach vom PDA eine Datei nehmen und diese auf den PC transferieren. Bei Embedded 3.0 konnte man dazu ActiveSync einbinden und die Datei darüber schicken. Aber wie bekomm ich denn das jetzt mit C# hin und CompactFramework.

bei Opennetcf gibt es ein Beispiel um vom PC aus auf den PDA zuzugreifen aber ich habe leider bisher noch nix gefunden das in die andere Richtung funktioniert.

Webservices hmm ich denk mal da muss dann ein Webserver laufen und das hab ich leider nicht-> falls ich da nicht falsch liege.

Also um die Frage konkreter zu stellen wie bekomme ich es hin, dass ich per ActiveSync Daten(Textdateien...) vom PDA zum PC schicke -> falls dies möglich ist.

Ansonsten bin ich über jeden anderen Vorschlag dankbar.

Mfg
Andi

23.09.2004 - 14:17 Uhr

Was mir auf die schnelle einfällt.

Lies die Datei aus und lass einfach die ersten 20 Zeilen weg und speicher dann die Datei wieder.

orgDatei --> auslesen --> neuerstellteDatei --> speichern--> neuerstellteDatei --> Parser drüberlaufen lassen.

Mfg
Andi

23.09.2004 - 13:56 Uhr

Hi wie kann ich denn vom PDA aus (Betriebssystem: Windows Ce .net 4.2) Daten auf den PC schicken?

Welche Klasse brauch ich denn da?

Mfg
Andi

22.09.2004 - 13:05 Uhr

Hi,

jetzt hab ich ein anderes Problem und zwar wenn ich dAten erhalte, dann steigt meine Applikation aus ohne Fehlermeldung es reagiert einfach nicht mehr.

Weiss jemand warum?

Meine EventReceive sieht so aus


private void oSerial_DataReceived()
		{
			MessageBox.Show("Daten empfangen");
			// since RThreshold = 1, we get an event for every character
			byte[] inputData = new byte[oSerial.InBufferCount];

			// read the character
			inputData = oSerial.Input;

			// display as text
			Encoding enc = Encoding.ASCII;
			string displayString = enc.GetString(inputData, 0, inputData.Length);
			textBoxTransponder.Text = textBoxTransponder.Text +  displayString;
		}

Mfg
Andi

21.09.2004 - 16:05 Uhr

Hi Ernie,

danke für die Antwort genau das war es.

THX
andi

21.09.2004 - 14:14 Uhr

Hi,

ich hab ein Handheldgerät mit Windows Ce .net 4.2 und jetzt möchte ich den Comport öffnen.

Hab mir die Opennetcf Serialtool geholt wenn ich aber jetzt versuche einen neuen Port zu initialisieren dann erhalte ich die Fehlermeldung, dass der Port nicht zulässig ist.

Hab die folgendenen Ports probiert:

"COM1:" oder "1" oder "Com1"... natürlich auch die höheren 2,3,4,5...
aber es kommt immer nur die eine Fehlermeldung.

Kann mir da jemand helfen?

Mfg
Andi

21.09.2004 - 08:21 Uhr

Hi,

Ich glaube wenn du einen Eintrag markieren willst, dann muss du über SelectedIndex gehen.

Mit der Hintergrundfarbe kann ich leider nicht helfen

Mfg
Andi

20.09.2004 - 16:49 Uhr

So,

nachdem bisher keiner geantwortet hat versuch ich es mal.

So damit du mit einer Access datenbank verbindung herstellen kannst musst du erst einmal ein OleDbConnection objekt zu deinem Projekt hinzufügen.

wenn du visual studio .net 2003 verwendest, dann kommt hier gleich ein Hilfeassistent der selbsterklärend ist.

danach musst du der oledbconnection noch einen connectionstring übergeben:

der so aussieht:


Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DeinPfadzurDB;Jet OLEDB:Database Password=mypassword;

Danach kannst du dann die Verbindung zur DB öffnen

um Sql-Befehle zur DB zu schicken benötigst du einen oledbcommand objekt

schau dir einfach die Hilfe an (MSDN) da steht es wie es funktioniert.

diesem oledbcommand kannst du SQL Befehle übergeben und ausführen.

Tja und das wars dann eigentlich schon. Hoffe ich konnte helfen

Mfg
Andi

20.09.2004 - 08:16 Uhr

Hi Ftee,

ich werde auf deine Antwort warten. 😁

MFG
Andi

27.08.2004 - 18:08 Uhr

Hi Danke für eure Antworten war gerade 2 Wochen im Urlaub.

So zu euren Fragen.

Es sind max. 10 Benutzer die darauf zugreifen.

5 OleDbDataAdapter da ich 5 Tabellen habe und es einfach nicht funktioniert einem oledbdataadapter mehrere Tabellen zu verpassen. Obwohl diese alle miteinander in Beziehung stehen (wieso das so ist k.a.)

Der Update des gesamten DataSet erfolgt nur alle 10 minuten. Was natürlich jede Sekunde passieren kann, ist, dass neue einträge in die Datenbank reinfließen und zwar genau dann wenn jemand sein gerade zu erfassendes Projekt beendet und diese Information dann gespeichert wird.

Aber ich denke mal ich werde mal versuchen das alles auf mysql oder sqLite umzustellen. - müsste ja im Prinzip genauso funktionieren.

THX
Andi

11.08.2004 - 16:25 Uhr

Hi,

also meine Connection ist eine OleDbConnection Jet 4.0 ;
dann habe ich 5 OleDbDataAdapter die ein Typisiertes DataSet füllen

Die Datenbank liegt auf einem Serverlaufwerk- Anbindung 100Mbit

bei anderen Benutzern die mein Programm testen ist es noch extremer bei mir läuft es schon fast flüssig aber bei den anderen da bleibt er mal so ca. 5 sekunden stehen, bis er mal den Benutzer in die DB eingetragen hat.

wenn ich einen neuen Eintrag mache, dann habe ich im Taskmanager nur einen leichten Anstieg - aber ich denk mal das er auf 100 % hoch geht so wie die Maus dann über Bildschirm schwirrt

Vielleicht mache ich ja auch etwas falsch? hast du mir mal ein Projekt von dir das ich mir das mal anschauen kann?

Mfg
andi

11.08.2004 - 15:05 Uhr

Nein leider nicht,

wenn mein Programm anfängt auf die datenbank (.mdb) zuzugreifen dann hängt er voll rum.

Datenbank wird über dataSet angesprochen

11.08.2004 - 12:42 Uhr

Hi,

mein Programm beinhaltet eine Datenbank und ein DataSet mit allen relevanten Tabellen darin.

Mein Problem ist aber nun, wenn man einen neuen Eintrag macht oder ich einen Timer laufen lassen, der nur dafür sorgt, dass alle Clients auf dem gleichen Stand sind, dann ruckelt die Maus. Also sobald mein Programm aktiv etwas macht, wird der PC irgendwie ausgebremst? Jetzt wollte ich nur mal fragen ob jemand dieses Phänomen kennt und weiss wie man da abhilfe schafft?

Mfg
Andi

09.08.2004 - 09:16 Uhr

thx für die Antwort jetzt funktioniert es

Mfg
Andi

08.08.2004 - 16:42 Uhr

Hi versuche diese Abfrage zum laufen zu bringen:


DataRow[] myDataRow = dtsMessungen.Tables["Messungen"].Select("Seriennummer = '" + textBoxSeriennummer.Text.Trim() + "' AND Datum = #" + Convert.ToDateTime(comboBoxMessungen.Text)+"00:00:00#","Messnummer ASC");

was soll sie bewirken sie soll aus dem datasetMessungen die Werte herauslesen, dessen seriennummer und das Datum (steht in der Datenbank drin z.B. 27.07.2004) .

In der ComboBoxMessungen stehen das Datum drin und zwar 27.07.2004 aber ich bekomme bei dieser abfrage immer die Fehlermeldung, dass die Zeichenfolge nicht als DateTime erkannt wird.

Hoff mir kann jemand sagen wo mein Fehler liegt.

THX
Andi

07.08.2004 - 11:27 Uhr

Warum muss denn dieser Teil bei dir immer laufen? Kannst du nicht einen Timer einbauen, der ab und zu mal diese Schleife durchläuft? - Ist das eine Endlosschleife?

Andere Möglichkeit währe es das du ein 2. Programm laufen lässt oder einen 2. Thread und hier dann Multithreading betreibst.

Ob diese Möglichkeiten für dich in fragen kommen weiss ich nicht aber das so mal meine Ideen.

Du solltest dir nur gedanken machen ob die schleife wirklich die ganze Zeit laufen muss

Mfg

Andi

07.08.2004 - 11:24 Uhr

Hi noch eine kleine Frage zum Thread,

wenn ich jetzt meine Methode durchlaufen habe, stoppt der Thread dann automatisch oder muss ich die Methode Abort() aufrufen? - damit der Thread aufhört zu existieren.

Mfg
Andi

06.08.2004 - 16:48 Uhr

ok nur so ne frage aber warum nimmst du nicht die Textbox dafür? die kannst du ja Readonly setzen.

Mfg
andi

04.08.2004 - 18:59 Uhr

Hi,

ich will drucken und zwar soll meine seite so aussehen:

auf 1. Seite erscheinen
header (Firmendaten usw.
nach dem Header und durchgehend
Messwerte
am Ende der Seite
Seitenanzahl

Wenn alle Messergebnisse gedruckt wurden soll noch ein abschlußtext drunter.

So ich habe mir da auch schon einiges zusammengebastelt aber leider ist mein Problem wenn ich mehrere Seiten drucken möchte wie kann ich das anstellen, ohne jedesmal den Header zu schreiben?

Hier mal mein Code den ich bisher geschrieben habe das ist bis jetzt der Header und mein 1. Versuch die Messungen zu drucken, die in einer DataTable stehen


float linesPerPage = 0;
			float yPosition = 0;
			int iCountLines = 0;
			//Linker Rand
			float leftMargin = ev.MarginBounds.Left;
			//Spalten für Gerätedaten und Prüfdaten
			//4 spalten 1. = LeftMargin, 2. = TextGerätedaten, 3. Prüfdaten, 4. TextPrüfdaten
			float fSpalte2 = 200;
			float fSpalte3 = 450;
			float fSpalte4 = 600;
			//Spalten für Messwerte
			//4 Spalten untergliedern 1. Messung, 2. Prüfschritt, 3. Grenzwert, 4.Messwert
			float fMSpalte2=400;
			float fMSpalte3=550;
			float fMSpalte4=650;
			int iZeilen=0;
			//oberste Position
			float topMargin = ev.MarginBounds.Top;
			string line = null;
			//Font printFont = this.richTextBox1.Font;
			SolidBrush myBrush = new SolidBrush(Color.Black);
			float ftemp = 8.25f;
			DataTable dt;
			//Schriftarten
			Font FontBriefkopf= new Font("Microsoft Sans Serif",ftemp);
			Font FontÜberschriftGroß = new Font("Microsoft Sans Serif",14.25f,FontStyle.Bold);
			Font FontStandard = new Font("Arial",8.25f);
			Font FontÜberschrift = new Font("Arial",8.25f,FontStyle.Bold);
			//Farben
			//Pen
			Pen PenTabelle = new Pen(Brushes.Gray);
			
			// DataTable übergeben mit dem Aufbau Messname, Messnummer, Grenzwert + Einheit, Messwert + Einheit
			DataRow[] myDataRow = dtsMessungen.Tables["Messungen"].Select("Seriennummer = '" + textBoxSeriennummer.Text.Trim() + "' AND Datum = '" + comboBoxMessungen.Text.Trim()+"'","Messnummer ASC");
			dt = CreateDtDataGrid();
			if (myDataRow.Length != 0)
			{
				DataRow myRow;
				for (int i= 0; i < myDataRow.Length; i++)
				{
					myRow = dt.NewRow();
					myRow["Messung"] = myDataRow[i]["Messname"];
					myRow["Prüfschritt"] = myDataRow[i]["Messnummer"];
					myRow["Grenzwert"] = myDataRow[i]["Messgrenzwert"]+ " [" + myDataRow[i]["Messwerteinheit"] + "]";
					myRow["Messwert"] = myDataRow[i]["Messwert"] + " [" + myDataRow[i]["Messwerteinheit"] + "]";
					dt.Rows.Add(myRow);
				}
			}
			// Work out the number of lines per page, using the MarginBounds.
			linesPerPage = ev.MarginBounds.Height / FontBriefkopf.GetHeight(ev.Graphics);
			//------------------------------------------
			//Header -> Mit x-y Positionen arbeiten da dieser Bereich bei jedem Ausdruck gleich bleibt
			//Briefkopf
			//------------------------------------------
		
			//Anfangsposition
			yPosition = topMargin;
			//Briefkopf
			ev.Graphics.DrawString("Service-Center Endoscopy",FontBriefkopf, Brushes.Red,topMargin,yPosition);
			ev.Graphics.DrawString("test GmbH",FontBriefkopf,Brushes.Gray,leftMargin,yPosition += FontBriefkopf.GetHeight(ev.Graphics));
			ev.Graphics.DrawString("teststr. 14",FontBriefkopf,Brushes.Gray,leftMargin,yPosition += FontBriefkopf.GetHeight(ev.Graphics));
			ev.Graphics.DrawString("9999 Berlin",FontBriefkopf,Brushes.Gray,leftMargin,yPosition += FontBriefkopf.GetHeight(ev.Graphics));

			//2. Reihe
			ev.Graphics.DrawString("T +49 (0) 66666330",FontBriefkopf,Brushes.Gray,leftMargin + 160,yPosition= topMargin);
			ev.Graphics.DrawString("F +49 (0) 666666",FontBriefkopf,Brushes.Gray,leftMargin+ 160,yPosition += FontBriefkopf.GetHeight(ev.Graphics));
			ev.Graphics.DrawString("www.irgendwas.com",FontBriefkopf,Brushes.Gray,leftMargin+ 160,yPosition += FontBriefkopf.GetHeight(ev.Graphics));
			ev.Graphics.DrawString("Email: [EMAIL]test@test.com[/EMAIL]",FontBriefkopf,Brushes.Gray,leftMargin+ 160,yPosition += FontBriefkopf.GetHeight(ev.Graphics));
			//Logo
			ev.Graphics.DrawImage(Image.FromFile(Application.StartupPath + @"\Bilder\Logo.jpg",true),leftMargin+440 ,topMargin);

			//Überschrift Messprotokoll
			ev.Graphics.DrawString("Mess - Protokoll",FontÜberschriftGroß,Brushes.Black,leftMargin+30,yPosition = topMargin);
			//jetzt topMargin neu setzen damit das nächste unter Mess-Protokoll gedruckt wird
			topMargin += yPosition + 30 +  FontÜberschriftGroß.GetHeight(ev.Graphics);
			ev.Graphics.DrawString("Der untenstehende, aufgeführte Gegenstand wurde inspiziert und geprüft, wobei die folgenden Ergebnisse",FontStandard,Brushes.Black,leftMargin,yPosition = topMargin);
			ev.Graphics.DrawString("bei der Prüfung verzeichnet wurden:",FontStandard,Brushes.Black,leftMargin,yPosition += FontStandard.GetHeight(ev.Graphics));

			//Jetzt Gerätedaten mit Tabelle
			topMargin += 40;
			//Kasten um Gerätedaten
			//ev.Graphics.DrawRectangle(new Pen(Brushes.Orange),leftMargin,topMargin,100,FontÜberschrift.GetHeight(ev.Graphics));
			ev.Graphics.FillRectangle(Brushes.Orange,leftMargin,topMargin,300,FontÜberschrift.GetHeight(ev.Graphics));
			ev.Graphics.DrawString("Gerätedaten",FontÜberschrift,Brushes.Black,leftMargin + 10,topMargin);
			//auf die gleiche Höhe Prüfdaten nur links
			ev.Graphics.FillRectangle(Brushes.Orange,fSpalte3,topMargin,300,FontÜberschrift.GetHeight(ev.Graphics));
			ev.Graphics.DrawString("Prüfdaten",FontÜberschrift,Brushes.Black,fSpalte3 + 10,topMargin);
			//Seriennummer
			ev.Graphics.DrawString("Seriennummer:",FontStandard,Brushes.Black,leftMargin + 10,topMargin += FontStandard.GetHeight(ev.Graphics));
			//Hersteller aus Textfeld
			ev.Graphics.DrawString(textBoxSeriennummer.Text.Trim(),FontStandard,Brushes.Black,fSpalte2,topMargin);
			//Messgerät
			ev.Graphics.DrawString("Messgerät:",FontStandard,Brushes.Black,fSpalte3 + 10,topMargin);
			//Messgerätfeld
			ev.Graphics.DrawString(textBoxMessgerät.Text.Trim(),FontStandard,Brushes.Black,fSpalte4 ,topMargin);
			//Artikelnummer
			ev.Graphics.DrawString("Artikelnummer:",FontStandard,Brushes.Black,leftMargin + 10,topMargin += FontStandard.GetHeight(ev.Graphics));
			//Artikelnummerfeld
			ev.Graphics.DrawString(textBoxArtikelNr.Text.Trim(),FontStandard,Brushes.Black,fSpalte2,topMargin);
			//Prüfnorm
			ev.Graphics.DrawString("Prüfnorm:",FontStandard,Brushes.Black,fSpalte3+10,topMargin);
			//Prüfnormtext
			ev.Graphics.DrawString(textBoxPrüfNorm.Text.Trim(),FontStandard,Brushes.Black,fSpalte4,topMargin);
			//Hersteller
			ev.Graphics.DrawString("Hersteller:",FontStandard,Brushes.Black,leftMargin + 10,topMargin += FontStandard.GetHeight(ev.Graphics));
			//Herstellerfeld
			ev.Graphics.DrawString(textBoxHersteller.Text.Trim(),FontStandard,Brushes.Black,fSpalte2,topMargin);
			//Netzkabel
			ev.Graphics.DrawString("Netzkabel:",FontStandard,Brushes.Black,fSpalte3 + 10,topMargin);
			//Netzkabelfeld
			if (checkBoxKabel.Checked == true)
			{
				ev.Graphics.DrawString("Mit org. Kabel gemessen",FontStandard,Brushes.Black,fSpalte4,topMargin);
			}
			else
			{
				ev.Graphics.DrawString("Kein org. Kabel vorhanden",FontStandard,Brushes.Black,fSpalte4,topMargin);
			}
			//Modell
			ev.Graphics.DrawString("Modell:",FontStandard,Brushes.Black,leftMargin + 10,topMargin += FontStandard.GetHeight(ev.Graphics));
			//Modellfeld
			ev.Graphics.DrawString(textBoxModell.Text.Trim(),FontStandard,Brushes.Black,fSpalte2,topMargin);
			//Patientenanschlüsse
			ev.Graphics.DrawString("Pat. Anschlüsse:",FontStandard,Brushes.Black,fSpalte3+10,topMargin);
			//Patientenanschlüssefeld
			ev.Graphics.DrawString(textBoxPatAnschlüsse.Text.Trim(),FontStandard,Brushes.Black,fSpalte4,topMargin);
			//MPG
			ev.Graphics.DrawString("MPG:",FontStandard,Brushes.Black,leftMargin + 10,topMargin += FontStandard.GetHeight(ev.Graphics));
			//MPGfeld
			ev.Graphics.DrawString(textBoxMPG.Text.Trim(),FontStandard,Brushes.Black,fSpalte2,topMargin);
			//Betriebsspannumg
			ev.Graphics.DrawString("Betriebsspannung:",FontStandard,Brushes.Black,fSpalte3+10,topMargin);
			//Betriebsspannungsfeld
			ev.Graphics.DrawString(textBoxBetriebsspannung.Text.Trim() + " V",FontStandard,Brushes.Black,fSpalte4,topMargin);
			//Schutzklasse
			ev.Graphics.DrawString("Schutzklasse:",FontStandard,Brushes.Black,leftMargin + 10,topMargin += FontStandard.GetHeight(ev.Graphics));
			//Schutzklassenfeld
			ev.Graphics.DrawString(textBoxSchutzklasse.Text.Trim(),FontStandard,Brushes.Black,fSpalte2,topMargin);
			//Kontrollintervall
			ev.Graphics.DrawString("Kontrollintervall:",FontStandard,Brushes.Black,fSpalte3+10,topMargin);
			//Kontrollintervallfeld
			ev.Graphics.DrawString(comboBoxKontrollintervall.Text.Trim(),FontStandard,Brushes.Black,fSpalte4,topMargin);
			//Geräteklasse
			ev.Graphics.DrawString("Geräteklasse:",FontStandard,Brushes.Black,leftMargin + 10,topMargin += FontStandard.GetHeight(ev.Graphics));
			//Geräteklassefeld
			ev.Graphics.DrawString(textBoxGeräteklasse.Text.Trim(),FontStandard,Brushes.Black,fSpalte2,topMargin);

			//jetzt kommen die gesamten Messungen
			//erstmal neues TopMargin festlegen
			topMargin += 20;
			//Dann Balken zeichnen
			ev.Graphics.FillRectangle(Brushes.Orange,leftMargin,topMargin,650,FontÜberschrift.GetHeight(ev.Graphics));
			//dann wieder in 4 Spalten untergliedern Messung, Prüfschritt, Grenzwert, Messwert
			//Überschrift Messung
			ev.Graphics.DrawString("Messung",FontÜberschrift,Brushes.Black,leftMargin+10,topMargin);
			//Überschrift Prüfschritt
			ev.Graphics.DrawString("Prüfschritt",FontÜberschrift,Brushes.Black,fMSpalte2,topMargin);
			//Überschrift Grenzwert
			ev.Graphics.DrawString("Grenzwert",FontÜberschrift,Brushes.Black,fMSpalte3,topMargin);
			//Überschrift Messwert
			ev.Graphics.DrawString("Messwert",FontÜberschrift,Brushes.Black,fMSpalte4,topMargin);

		
		
			
			//jetzt hat man die Tabelle-> dt

			//mit schleife durchlaufen
		
			
			iCountLines = 0;
			while((iZeilen < dt.Rows.Count)&& (iCountLines < linesPerPage))
			{
				//solange Werte auf die Seite drucken
				topMargin += FontStandard.GetHeight(ev.Graphics);
				ev.Graphics.DrawString(dt.Rows[iZeilen]["Messung"].ToString(),FontStandard,Brushes.Black,leftMargin+10,topMargin);
				ev.Graphics.DrawString(dt.Rows[iZeilen]["Prüfschritt"].ToString(),FontStandard,Brushes.Black,fMSpalte2,topMargin);
				ev.Graphics.DrawString(dt.Rows[iZeilen]["Grenzwert"].ToString(),FontStandard,Brushes.Black,fMSpalte3,topMargin);
				ev.Graphics.DrawString(dt.Rows[iZeilen]["Messwert"].ToString(),FontStandard,Brushes.Black,fMSpalte4,topMargin);
				iZeilen++;
				iCountLines++;
			}
		
			// If there are more lines, print another page.
			if(iZeilen != dt.Rows.Count)
				ev.HasMorePages = true;
			else
				ev.HasMorePages = false;

			myBrush.Dispose();


Nun ist die Frage wie kann ich mir denn merken, in welcher Zeile ich gerade in der DataTable stehe und wie bekomme ich es hin, dass nicht immer der Briefkopf gedruckt wird?

hoffe mir kann jemand helfen

THX
Andi

//edit by Alex
Bitte CSHARP BB Code verwenden!

03.08.2004 - 16:54 Uhr

Hi,
ich kann jetzt nur sagen, was passiert wenn du es an ein DataSet hängst dann wird immer der aktuelle Eintrag aus der Tabelle im DataSet angezeigt. Wenn du hier eine andere Zeile auswählst, ändert sich der Wert des gebundenen Objekts

Aber wie das sonst aussieht k.a.

MFG
Andi

03.08.2004 - 13:54 Uhr

Hi,

ok ist jetzt vielleicht eine blöde Frage aber was bringt mit diese Parallelitätssteuerung ausser Ärger.

Und zwar schreibe ich eine Software, die bestimmte Zeiten mitstoppt und diese in eine Datenbank schreibt. Das Programm läuft auf mehreren Rechnern und greift auf eine DAtenbank(.mdb) zu. Jetzt habe ich immer wieder Fehlermeldungen, dass ein Parallelitätskonflikt aufgetreten ist wenn ich das DataSet das mit der Tabelle in der Datenbank verbunden ist update. Ich habe jetzt zwar eine Möglichkeit gefunden den Fehler zu erhalten, aber wie kann ich es jetzt schaffen, das die Aktuellen Einträge vom Dataset in die Datenbank eingetragen werden?

Beim OleDbDataAdapter Assistenten, hat man ja die Möglichkeit die Parallelität auszuschalten doch im Programm bekomme ich dann trotzdem Fehlermeldung, das sich der Update-Befehl sich auf 0 Datensätze ausgewirkt hat.

Hoffe mir kann das jemand erklären, da ich mit meinem Latein am Ende bin 🙁

Vielen Dank
Andi

01.08.2004 - 09:45 Uhr

Hi,
vielen dank für die Info.

Habt ihr vielleicht ein Beispiel damit ich das mal anschauen kann? Habs nicht so mit Thread´s

Mfg
Andi

31.07.2004 - 12:37 Uhr

Hi,

ich führe in meinem Programm einen Datenaustausch mit einem Externen Gerät durch. Ich möchte nun solange der Datenaustausch stattfindet, einen Dialog einblenden, in dem nur eine Uhr angezeigt wird die läuft und 2 Sätze. Das ist kein Problem aber wenn ich die Form als ShowDialog() aufrufe, führt er meinen Code im Hauptprogramm nicht weiter aus. Wenn ich die Form als Show() aufrufe dann führt er zwar den Code aus aber der Benutzer kann zwischen den beiden Forms hin und her springen. Weiss jemand wie ich das am besten hindeichsle?

Mfg
Andi