Hallo,
mit System.Environment.Processorcount kannst du die Anzahl der Prozessoren feststellen.
Mit der System.Diagnostics.Process-Klasse kannst du Prozesse starten.
Grüße, Koller.
Hallo,
nicht:
new OleDbCommand("select * from c:test.txt, oledbconnection");
sondern:
new OleDbCommand("select * from c:test.txt", oledbconnection);
Was soll "c:test.txt" bedeuten?
Das mit dem Trennzeichen funktioniert so auch nicht: FMT=Delimited(;). Laut ConnectionStrings ist das Trennzeichen in der Registry eingetragen.
Das hier:
oledbconnection.Open();
ganz weglassen.
Der Übersichtlichkeit halber würde ich noch den OleDbConnectionStringBuilder verwenden. Also mal komplett:
DataTable dt = new DataTable();
OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder();
builder["Provider"] = "Microsoft.Jet.OLEDB.4.0";
builder["Data Source"] = @"c:\testverzeichnis\";
builder["Extended Properties"] = "text;HDR=Yes;FMT=Delimited";
OleDbConnection oledbconnection = new OleDbConnection(builder.ConnectionString);
OleDbCommand cmd = new OleDbCommand("select * from test.txt", oledbconnection);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(dt);
Vielleicht geht das Ganze ja auch einfacher "zu Fuß", also mit den Klassen aus System.IO.
Grüße, Koller.
Hallo,
in den FAQ gibt es ein extra Thema zum Zugriff auf Office: FAQ Office. Siehe Abschnitt "Wie kann ich schnell auf Access, Excel und Outlook Daten zugreifen?"
Ich sehe nicht ganz, warum du die Daten erst nach Access exportieren willst.
Grüße, Koller.
Hallo,
wie wäre es mit der Form.Owner-Eigenschaft?
When a form is owned by another form, it is minimized and closed with the owner form
Grüße, Koller.
Hallo,
wenn die Forms eh keinen Minimieren/Maximieren-Button haben sollen, kannst du doch FormBorderStyle=SizableToolWindow verwenden.
Grüße, Koller.
Hallo,
siehe UserControl mit Objekt als Property im Designer anpassen
und Property "aufklappbar" machen
und insbesondere PropertyGrid: Eigenschaft aufklappen
Grüße, Koller.
Hallo,
die System.Windows.Forms.PropertyGrid-Klasse hat die Eigenschaft HelpVisible (steht aber per Default schon auf "true").
Funktioniert auch wie gewünscht (siehe Anhang).
Rechtsklick ins Grid und dann Haken bei "Beschreibung" setzen müsste reichen 😃
... funktioniert bei einer VisualStudio-Eigenschaftsseite. Das muss man für ein eigenes PropertyGrid wohl wirklich selbst implementieren (ContextMenu).
Grüße, Koller.
Hallo,
oder noch einfacher:
string[] substrings = input.Split('&');
Grüße, Koller.
Hallo,
ich bezog mich dabei auf dwoes ursprünglichen Ansatz, also ohne Überschreiben von KeyDown (das steht aber in einem anderen Thread).
Grüße, Koller.
Hallo,
die Lösung mit der Entfernen-Taste finde ich eher unschön. Dafür muss der DropDownStyle der Combobox auf "DropDown" stehen. Dann ist das Textfeld der Combobox aber voll editierbar. Bei der Einstellung "DropDownList" können nur in der Liste enthaltene Werte ausgewählt werden.
Zwischen Laden der Detailtabelle und Binden an die ComboBox würde ich dann einen temporären Datensatz einfügen:
DataRow newRow = detailsTable.NewRow();
newRow["ID"] = DBNull;
newRow["Value"] = "<kein>";
detailsTable.Rows.InsertAt(newRow, 0);
Bei beiden Lösungen solltest du aber Bedenken, dass Access hierfür keinen Fremdschlüssel mit automatischer Überprüfung der referentiellen Integrität erstellen kann. Änderungen und Löschungen in der Detailtabelle bedürfen dann also auch der "manuellen Nacharbeit". Vollautomatisch geht's wohl nur mit einem festen "leeren" Eintrag in der Detailtabelle.
(Edit: Tippfehler korrigiert)
Grüße, Koller.
Hallo!
Sie ist ja aber schreibgeschützt. Wie kann ich sie zur Laufzeit ändern?
Das geht eben nicht.
Wie wär's denn hiermit: [Tutorial] Das neue Konfigurationsmodell im .NET Framework 2.0
Grüße, Koller.
Hallo!
BindingSource1.ResetCurrentItem()
nach dem Einrichten der Bindung der ComboBox aufrufen.
Warum programmierst du in VB, bzw gibt es keine VB-Foren? 😉
Wenn dies kein spezielles Projekt betrifft, wo Access vorrausgesetzt wird, sondern nur zum Einarbeiten in ADO.net, solltest du besser gleich SQL-Server-Express oder Compact o.ä. verwenden.
Dir wird eher geholfen, wenn du die relevanten Codeschnipsel direkt einfügst und kein ganzes Projekt anhängst, denke ich.
Grüße, Koller.
Hallo,
mit
ResourceWriter rw = new ResourceWriter("ProductionManager.Resources.Resource1");
erzeugst du eine Datei in deinem aktuellen Arbeitsverzeichnis.
Wenn ich das richtig verstehe greifst du hiermit
Resources.Resource1.Password
aber auf eingebettete, schreibgeschützte Resourcen in deiner .exe zu.
Grüße, Koller.
Hallo,
Vom RC5 Code habe ich zwar überhaupt keine Ahnung, aber:
a.
Die Ausführung des Threads wird für den angegebenen Zeitraum vom Betriebssystem nicht geplant.
Das heisst jedoch nicht, dass der Thread nach genau der Zeit weiterarbeitet, die du gerne hättest.
b.
Diese Überladung von Sleep verwendet in timeout die Gesamtanzahl von ganzen Millisekunden.
Eine Zeitspanne von 69 Ticks kann Thread.Sleep also sowieso nicht genau verarbeiten.
Grüße, Koller.
Hallo,
du musst den Befehl auch noch ausführen (es sei denn, das gehört zum nicht relevanten Code 😃 ), also cmd.ExecuteNonQuery().
Grüße, Koller.
Hallo,
Wenn du struct verwenden willst musst du dafür eine Klasse schreiben, die die IComparer<T>-Schnittstelle implementiert. Siehe hier.
Also:
class licenseinfoComparer : IComparer<licenseinfo>
{
#region IComparer<licenseinfo> Member
public int Compare(licenseinfo x, licenseinfo y)
{
return string.Compare(x.name,y.name);
}
#endregion
}
BTW: value ist ein Schlüsselwort und sollte nicht als Bezeichner verwendet werden.
Grüße, Koller.
Bezüglich der DataGridViewComboBoxColumn:
Kannst du denn in der dem DataGridView zugrunde liegenden Liste (also "Machine.RBAPanel.ListSingleBoards") auf das Feld "PropertyCode" zugreifen? Vermutlich nicht, dann kannst du das Feld auch nicht im DGV anzeigen und bearbeiten. Wie ErfinderDesRades schon sagte hast du das mit dem "enum als ComboBox-Anzeigen" doch schon gelöst.
Grüße, Koller.
Hallo,
'Columns.RemoveAt' erwartet einen int-Wert als Index. Columns.Remove arbeitet mit dem Spaltennamen oder dem Objektverweis. Das steht aber auch in der Doku. Evtl. ist es aber auch sinnvoller die Spalte nur auszublenden.
Grüße, Koller.
[Edit: Rechtschreibfehler korrigiert]
Hallo,
wenn ich das richtig verstehe gibt es das Problem mit dem ValueMember. Im Watch-Fenster sieht man, dass 'PropertyCode' ein Feld ist und vermutlich geschützt. Das wirst du in dem DataGridView überhaupt nicht verwenden können.
Grüße, Koller.
Hallo,
das ist natürlich noch eleganter, schon alleine weil hier auch die ursprüngliche Sortierung der Items erhalten bleibt.
Grüße, Koller.
Hallo,
das geht zumindest mit dem Objektbrowser von VS (oder habe ich da was falsch verstanden).
Grüße, Koller.
Hallo!
Vielleicht kann ein Admin den Thread ja aufteilen und in die entsprechenden Unterforen verteilen
Warum erscheinen bei mir eigentlich immer diese OffTopic-Tags???
Du könntest dir ein Dictionary<ComboBox, Object> (oder Dictionary<ComboBox, string>, wenn nur Strings in der Liste stehen) erzeugen. Hier werden alle ComboBoxen hinzugefügt. Im Value-Member des Dictionarys merkst du dir den aktuellen Wert.
Dann für alle ComboBoxen denselben EventHandler abonnieren (ungetestet):
private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox comboBoxSender = (ComboBox)sender;
foreach (KeyValuePair<ComboBox, object> keyValuePair in myComboBoxes)
{
if (!keyValuePair.Equals(comboBoxSender))
{
// Bei allen ComboBoxen, die nicht das Event ausgelöst haben, wird der neue Wert (SelectedItem) aus der Liste entfernt
// und der alte Wert (im Dictionary gespeichert) der Liste hinzugefügt.
keyValuePair.Key.Items.Remove(comboBoxSender.SelectedItem);
keyValuePair.Key.Items.Add(myComboBoxes[comboBoxSender]);
}
// Den aktuellen Wert der geänderten ComboBox im Dicionary merken.
myComboBoxes[comboBoxSender] = comboBoxSender.SelectedValue;
}
Grüße, Koller.
Hallo,
wie du schon richtig erkannt hast, solltest du zuerst feststellen, ob die Daten überhaupt in deiner DataTable ankommen. Setze doch einfach einen Haltepunkt in die Zeile nach
DataTable myDataTable = DtSet.Tables[0]; // füllt das Datset in ein DAtatable ab
dann kannst du dir den Inhalt von myDataTable mit dem DataTable Visualizer von VS anschauen. Für eine einzelne Tabelle benötigst du auch nicht unbedingt ein DataSet.
Um auf die erste Zeile der Tabelle zuzugreifen benötigst du kein extra Array.
row[0] liefert den Inhalt der ersten Spalte der DataRow.
Grüße, Koller.
Guten Morgen,
hast du dir die Links in meinen Beitrag mal angeschaut, insbesondere die Wertebereiche der Typen? Oder gibt es da ein grundsätzliches Problem mit dem Begriff "Wertebereich"???
DU KANNST KEINEN DOUBLE-WERT, DER GRÖSSER ALS Int32.MaxValue IST, IN EINE VARIABLE VOM TYP Int32 CASTEN!!!
hab ich ein Problem bei dem TimeSpan-Objekt, da dieses ja nur Int32 akzeptiert
Falsch, Timespan akzeptiert auch Int64-Werte (TimeSpan-Struktur, insbesondere TimeSpan.MaxValue-Feld).
Aber auch das ist für dein Beispiel noch nicht ausreichend. Wie du schon bemerkt hast, kann Timespan auch keine Umwandlung in Monate und Jahre, das kannst du also sowieso nicht verwenden.
Ich denke nicht dass ich das als Neuling schon in eine eigene Methode packen kann 😕
Warum denn nicht? Die Berechnung der möglichen Kombinationen erfolgt doch auch in einer Methode, oder? Das ist doch nur ein bisschen Mathe. Teile den Wert durch 365, teile den Rest durch 30...
Grüße, Koller.
Hallo!
Welche Werte hast du denn bei dem Überlauf für zeichenlaenge und anzahl verwendet?
Mit double kannst du wesentlich größere Zahlen (MSDN) darstellen als mit ulong(MSDN).
Timespan.MaxValue = Int64.MaxValue: hilft dir also auch nicht weiter.
Eine eigene Methode schreiben fällt schonmal weg.
Warum?
Grüße, Koller.
verwendetes Datenbanksystem: Firebird
Hallo,
ich bin zur Zeit damit beschäftigt eine Datenbank zur Stammdatenverwaltung (Produkte, Benutzer, ...) aufzubauen. Diese Datenbank soll für verschiedene Projekte mit unterschiedlichen Anforderungen verwendet werden. Die Tabelle 'PARTS' enthält zum Beispiel immer die Felder 'ID', 'CUSTOMER_ID', 'NAME' und 'DESCRIPTION'. Projektabhängig soll der Anwender jetzt noch benutzerdefinierte Felder hinzufügen können.
Das funktioniert auch soweit schon. Jetzt habe ich noch eine Frage zur Anzeige der Spaltennamen, z.B. in einem DGV. Die Spaltenüberschriften, also DataGridViewColumn.HeaderText möchte ich ebenfalls variabel und auch mehrsprachig vorhalten können ('CUSTOMER_ID' soll bei Projekt A als 'Materialnummer', bei Projekt B aber als 'Artikelnummer' angezeigt werden, bei Sprachumschaltung eben auch noch in Englisch).
Ansatz:
Tabelle LANGUAGE_STRINGS:
TABLE_NAME|FIELD_NAME|LANGUAGE_ID|DISPLAY_TEXT
Tabelle LANGUAGES:
ID|NAME
mit Fremdschlüssel zwischen ID und LANGUAGE_ID
Das ganze kann dann mit diesem Select-Befehl abgerufen werden:
string query = "SELECT DISPLAY_TEXT FROM LANGUAGES INNER JOIN LANGUAGE_STRINGS ON ID = LANGUAGE_ID WHERE NAME = @paramCulture AND TABLE_NAME = @paramTable AND FIELD_NAME = @paramField"
Funktioniert auch soweit, kommt mir aber irgendwie etwas umständlich vor. Hat hier jemand vielleicht einen einfacheren Ansatz?
Koller.
Hallo,
das geht mit einem Umweg über die Default-View deiner Source-Tabelle.
DataTable gesellschaften = sourceDataTable.DefaultView.ToTable(true, "Gesellschaft");
Siehe auch hier.
Grüße, Koller.
Hallo,
ich denke du musst noch comboBox.DataPropertyName festlegen. Siehe auch DataGridView: Master/Detail über ComboBox.
Grüße, Koller.
Guten Morgen!
Vielleicht nochmal zur Klarstellung: in dem Programm, das auf dem Scanner läuft, soll also nach dem Lesen eines Barcodes direkt so etwas aufgerufen werden:
public void sendCodeToDatabase(string code)
{
SqlConnection connection = new SqlConnection("Server=192.168.1.1;Database=Barcodes;Uid=Scanner;Pwd=123;");
SqlParameter param = new SqlParameter("@param", code);
SqlCommand command = new SqlCommand("INSERT INTO Barcodes (Barcode) VALUES (@param)", connection);
command.Parameters.Add(param);
command.ExecuteNonQuery();
}
???
Grüße, Koller.
Hallo,
das verstehe ich jetzt nicht so ganz: Willst du jetzt über eine TCP/IP-Verbindung mit dem InSight kommunizieren oder direkt das Objektmodell (also z.B. CvsInsight) verwenden? Ich verstehe auch nicht so ganz, wie du den Button auslöst, bzw. wofür der Button überhaupt benötigt wird.
Wie auch immer, wenn du im Spreadsheet ein ReadDevice verwendest, stehen die empfangene Daten eben in dieser Zelle als String zur Verfügung und können weiterverarbeitet werden.
Grüße, Koller.
Hallo,
Deswegen die Frage, wohin das Proramm danach springt.
Nach meinem Verständnis nirgendwo hin (Wenn nur der GUI-Thread läuft). Dann ist nur noch die Nachrichtenschleife deiner Anwendung aktiv.
Grüße, Koller.
Hallo,
ich verwende ganz gerne die Aufgabenliste (zu viele Warnungen in der Fehlerliste finde ich nicht übersichtlich), die sollte es auch im VS2008 noch geben (?). Die Aufgabenliste ist unter dem Menü "Ansicht" zu finden.
// ToDo: ...
//Changed: ...
Ergebnis siehe Anhang.
Unter Menü "Extras->Optionen->Umgebung->Aufgabenliste" kann man auch eigene Token erstellen.
Grüße, Koller.
nd nein handeingabe ist definitiv ausgeschlossen 😉 sind halt die vorgaben ... solange bis ein Etikett mal nicht gelesen werden kann oder der Scanner kaputt geht und dadurch der ganze Prozeß zum Stillstand gebracht wird 😉
hmm präambel geht sowieso nicht weil auch andere programme die eingaben des scanners verarbeiten müssen können.
dann fällt wohl auch die Änderung der Scanner-Konfiguration flach.
Grüße, Koller.
Hallo,
oft arbeiten diese Geräte nicht als echtes USB-Gerät sondern erstellen einen virtuellen Com-Port. Das wäre dann auch recht einfach zu handhaben.
Weiterhin ist es noch sinnvoll die Handeingabe für Benutzer mit erweiterten Rechten zuzulassen (wenn ein Code nicht lesbar ist).
Grüße, Koller.
Hallo,
nach meinen Erfahrungen ist es schon üblich, dass ein Scanner eine Tastatur emuliert (merkt dann Windows überhaupt den Unterschied?). Alles was eine Tastatureingabe sperrt, sperrt dann natürlich auch die Daten vom Scanner.
[Edit] Die Emulation ("Keyboard Wedge") hat den Vorteil, dass man bestehende Anwendungen einfach um einen Scanner erweitern kann, ohne den Sourcecode ändern zu müssen. Wenn sowieso Codeänderungen vorgenommen werden, ist die serielle Kommunikation natürlich vorzuziehen. [/Edit]
Grüße, Koller.
verwendetes Datenbanksystem: FirebirdDB mit .Net-Provider.
Hallo,
habe leider noch keine Lösung für mein Problem gefunden: Ich habe in Firebird eine Domain namens "FILEPATH" als varchar(255) erstellt. Der Anwender hat die Möglichkeit in verschiedenen Tabellen selbst Spalten für benutzerdefinierte Daten anzulegen und hierfür auch den Datentyp FILEPATH zu verwenden. Beim Einlesen der Daten hat die entsprechende Spalte in einer .Net DataTable den Typ 'String'. Kann ich aus der Datenbank irgendwelche Metadaten auslesen, um den ursprünglichen Datentyp (hier also die von mir definierte Domain) zu erhalten, oder muss ich mir dies beim Anlegen der Spalten selbst merken?
Grüße, Koller.
Guten Morgen!
aber ich wollte eben gern einen Unterschied zwischen "Kein Datenträger" und "Datenträger nicht unterstützt"
Eine "Anwesenheitskontrolle" ist imho mit der Hardware des Laufwerks nicht möglich. Es gibt also keinen Unterschied zwischen den Zuständen "CD falsch herum eingelegt", "keine CD eingelegt", "CD völlig zerkratzt", "Salamischeibe eingelegt" 🙂
Deshalb gibt es dafür nur
Const IMAPI_MEDIA_TYPE_UNKNOWN = 0 ' Media not present OR is unrecognized
Dein ursprüngliches Problem
Meine Frage ist nun wie kann ich abprüfen ob in mein Laufwerk bereit ist und ob ein leerer Datenträger im Laufwerk ist? kannst du aber doch mit den 'Media States' lösen.
Grüße, Koller.
Hallo,
ich dachte, er benötigt den Verweis im Konstruktor des UC. Wobei dem vermutlich auch kein gutes Design zugrunde liegt(?).
Grüße, Koller.
Hallo,
ich versuche mit IMAPI2 ein Brenn Programm zu erstellen
warum willst du dann DriveInfo verwenden?
Hier ist der Zugriff auf Medien-Informationen beschrieben.
Grüße, Koller.
Sorry,
Im Übrigen zeigt der Windows Explorer dasselbe Verhalten und geht auf "not responding"
steht ja schon in deinem zweiten Post. Dann ist das auf alle Fälle kein .Net- oder C#-Problem.
Das Problem lässt sich mit mehreren Rechnern in der gleichen Domain reproduzieren?
Grüße, Koller.
BTW: Ich arbeite mit Windows XP und VS2005 also .Net 2.0.
Die Standarddialoge sind ja nur Wrapper um die Win32-Dialoge. Bleibt ein OpenFileDialog auch hängen? Lässt sich das Verhalten auch mit dem Windows-Explorer nachvollziehen (der müsste ja dann auch hängen bleiben) [Edit: da war jemand schneller 😃 /Edit]?
Grüße, Koller.
Hallo,
einen Verweis auf das Form solltest du über UserControl.TopLevelControl bekommen. Afaik verwendet der Designer immer den Standardkonstruktor.
Grüße, Koller.
Hallo,
tritt diese Verhalten nur in einer/einem bestimmten Domäne/Netzwerk auf? Ich bin hier mit einem Windows Small Buisness Server 2003 verbunden und kann die Probleme nicht nachvollziehen. Wenn ich den Netzwerkstecker abziehe und auf ein gemapptes Laufwerk klicke, wird die Sanduhr angezeigt und es passiert erstmal nichts. Anschließend komme ich aber wieder auf die vorhandenen lokalen Laufwerke und kann den Dialog auch schließen.
Als Domänenbenutzer sollte aber immer eine durchgehende Netzverbindung (zum Dömänenserver) bestehen, ansonsten kann alles mögliche geschehen (so auch das Hängen beim FolderBrowserDialog)... Das stimmt sicher nicht und wäre auch wenig praktikabel. Ich habe ein Notebook und arbeite auch viel zu Hause oder bei Kunden und benutze auch Offline meine Domain-Anmeldung ohne Probleme.
Grüße, Koller.
[Edit: Tippfehler korrigiert]
Hallo,
war gestern auf Brauereibesichtigung, wohl noch etwas früh heute morgen
die Infos die ich gefunden habe stehen auf Seite 43ff (pdf-Nummerierung). Wenn der Provider nicht gefunden wird, fehlt evtl. der Eintrag im GAC.
Grüße, Koller.
Guten Morgen!
Wenn man diesem Dokument (Seite 90) glauben kann, deutet die Fehlermeldung auf ein Problem mit der Namensauflösung hin. Hast du das mit der Hosts-Datei mal getestet?
BTW: Wenn es einen .Net-Provider gibt, warum verwendest du den denn nicht?
Grüße, Koller.
Hallo,
Auflösung der fernen Adresse nicht möglich könnte auch ein DNS-Problem sein. Kannst du mal probieren die AS400 in der Datei "C:\WINDOWS\system32\drivers\etc\hosts" einzutragen (Windows XP). Anschliessend ist glaube ich ein Neustart erforderlich.
Grüße, Koller.
Hallo,
du kannst für dein Benachrichtigungsform die TopMost-Eigenschaft auf true setzen, dann sollte es funktionieren.
Grüße, Koller.