Zum Inhalt springen

.NETter

Mitglieder
  • Gesamte Inhalte

    177
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von .NETter

  1. Hallo, ah ja Access :-) Hier so sollte es aber nun funktionieren: SELECT Test2.ID, Test2.Zahl, Sqr((Test2.Zahl^2)) AS Absolutwert FROM Test2 ORDER BY Sqr((Test2.Zahl^2)); Gruß, Thomas
  2. Hallo, das ist meines Wissens nach nicht möglich. Was Du tun kannst ist das Startverzeichnis manuell fest zu legen. saveFileDialog1.InitialDirectory = "c:\\"; Dieses Control bietet keine Events für DirectoryChanged o.Ä. an. Alternative: Selber etwas bauen! Benutze statische Methoden von z.B. File im Namensraum System.IO. Gruß, Thomas
  3. Hallo, ich würde hier das Design der Tabelle ändern. So wie es jetzt ist musst Du die Tabelle immer dann von Hand erweitern wenn eine Stadt dazu kommt. Und den Import natürlich auch. Also jede Änderung der Datendatei zieht Handarbeit nach sich. Ich würde die Spalten in Zeilen umwandeln: STADT | WERT ~~~~~~~~~~~~~~ München | 12 Nürnberg | 45 Köln | 67 Berlin | 81 Dazu noch irgendeinen PK. So bleibt die Tabellenstruktur sowie das Import-Command immer gleich. Beim Import liest Du die Spaltenköpfe in ein Array ein, so hast Du alle Städte die importiert werden. Jede weitere Zeile (Datenzeilen) werden ebenfalls in ein Array gelesen und die Daten entsprechend der Indexnummer (Stadtnummer im Array) in die Tabelle eingefügt. Ich weiß nicht ob die Werte einzeln gehalten werden oder kummuliert werden. Da kannst Du den Import von Hand "einmalig" anpassen. Also entweder eine neue Zeile mit Nürnberg oder wenn Nürnberg vorhanden dann den Wert der entsprechenden Zeile hinzufügen. So bleibt Deine Anwendung auf lange Sicht, auch bei extremen Änderungen, kompatibel. Gruß, Thomas
  4. Hallo! Ja OK Access sollte das wohl auch können. Zumindest wenn Du im SQL auch eine entsprechende ORDER BY - Klausel mitgibst; Dein da_ja = New OleDbDataAdapter("SELECT *, POWER(POWER(erg_div, 2), 0.5) AS Absolutwert FROM Zahlen", con_ja) Mein da_ja = New OleDbDataAdapter("SELECT *, POWER(POWER(erg_div, 2), 0.5) AS Absolutwert FROM Zahlen [COLOR="Red"]ORDER BY Absolutwert[/COLOR]", con_ja) So sollte es dann klappen. Gruß, Thomas
  5. Hallo, leider kann ich mich erst morgen(Dienstag) etwas darum kümmern da ich heute Nachmittag selbst eine Softwareübergabe habe. Aber dann finde ich bestimmt etwas Zeit! Gruß, Thomas PS: Wird aber flüssig umzusetzen sein... von daher keine Sorgen machen
  6. Hallo ! Ja ich habe mir dein Projekt mal heruntergeladen und auch getestet. Was soll ich sagen... es läuft. Ich bekomme genau eine Zeile mit Daten im DataGridView angezeigt (Eintrag 1, Eintrag 2 usw.). Da ich nun davon ausgehe, dass das Projekt auch OK ist kannst Du noch folgende Dinge prüfen. Welche Version von Visual Studio nutzt Du? Hast Du das Projekt zwischen verschiedenen VS Versionen hin und her kopiert? Express Edition ist teilweise eingeschränkt... Sind Servicepacks installiert? Ist die richtige Version der MDAC installiert? Gruß, Thomas
  7. Hallo! Hast Du den Timer über die grafische Benutzeroberfläche hinzugefügt oder rein im Code erstellt? Den Windows.Forms.Timer zu benutzen ist hier möglich aber leider total sinnfrei, da dieser auch eine Form zum handeln benötigt. Du brauchst hier einen System.Timers.Timer Siehe: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; namespace __WindowsService1 { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { System.Timers.Timer t = new System.Timers.Timer((double)5000); t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed); } void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //Hier den Code der nach dem Intervall ausgeführt werden soll... } protected override void OnStop() { } } } So sollte der Timer auch greifen. Das Elapsed-Event fängst du mit einem Eventhandler ab und kannst hier den entsprechenden Code auführen. Gruß, Thomas
  8. Hallo, du suchst also den Absoluwert zu deinen Ausgaben. Du musst im DataGridview eine weitere berechnete Spalte hinzufügen. Du änderst Die Abfrage für die Datenbindung wie in dem Beispiel hier: --Code für SQL Server (TSQL) SELECT id, zahl, POWER(POWER(zahl, 2), 0.5) AS Absolutwert FROM Zahlen ORDER BY Absolutwert Ich habe hier nur eine id und das Feld Zahl in der Tabelle. Die Spalte mit dem Absolutwert kannst Du auch auf Visible = False setzen. Habe das mal getestet und gibt eine Sortierung nach dem Zahlenwert unabhängig vom Vorzeichen zurück. Gruß, Thomas
  9. Globale Variablen... die sollte man wirklich nie benutzen und wie ich weiter oben geschrieben habe solche Dinge mit einem Eventhandler abfangen. Aber bitte, bitte, bitte dies mit einem "expliziten Eventhandler"! abfangen. Im FormLoad() kann viel drin stehen, was dann auch alles mit ausgeführt wird und was noch viel wichtiger ist... Was passiert wenn ich die Signatur des Events verändere und zum Beispiel noch einen String übergeben möchte? public delegate void Aktualisiert_EventHandler(object sender, EventArgs e, string returnString); public event Aktualisiert_EventHandler AKTUALISIERT; Dann hagelt es Fehler bei der Erstellung weil Form1_Load() private void Form1_Load(object sender, EventArgs e) nicht mehr die korrekte Signatur besitzt. Und wenn man hier mit Multuthreading arbeitet hat man bei globalen Variablen (die es in C# garnicht gibt ) ruckzuck einen Deadlock.
  10. Hallo, und die DB schon bekommen? Ja VBA hat bis auf den Namen nicht wirklich viel mit VB .NET zu tun. Es gibt hier natürlich Ähnlichkeiten aber ich würde mich so weit aus dem Fenster lehnen und sagen, dass es eine komplette Umstellung VBA zu VB .NET ist. In Java kannst Du natürlich auch auf den SQL Server zugreifen. Hier benötigst Du dann den Treiber für den SQL Server 2005 für Java. Einfach mal googeln. Da gibts massig Infos. Visual Studio (gibts auch als Express und ist somit kostenlos) unterstützt den SQL Server natürlich von Hause aus. Ich kann Dir gerne eine Kurzanleitung zum Portieren der DB geben wenn Du nun weißt was Du bekommen hast (.mdf oder .bak). Gruß, Thomas
  11. Hallo, der Code ist soweit OK. Das einzige was mir auffällt ist folgendes: test(0) = c c wird aber kein explizieter Wert zugeordnet und ist somit immer 0. Und somit wird durch den Klick test(0) immer auf 0 gesetzt. Gruß, Thomas
  12. Hallo, um Dich hier nicht ganz ohne Wissenszuwachs stehen zu lassen hier mal ein paar Infos: Ich denke Access ist Gemisch aus Datenhaltung und Benutzeroberfläche welches durchaus seine Daseinsberechtigung in verschiedenen Bereichen besitzt. Der SQL Server ist ein Datenbankserver mit mehreren Modulen von denen für Dich jetzt erstmal das Datenbankmodul interessant ist. - SQL Server Management Studio (SSMS) Mit diesem Tool hast Du Administrationskontrolle über den SQL Server 2005 EE. Und natürlich kannst Du noch sehr viel mehr damit tun. Zum Thema Administration gehört natürlich auch Backup un Restore von Datenbaneken. Hier kommt die Antwort auf Deine Frage "Wie bekomme ich die DB auf einen anderen Server". Im SSMS rechte Maustaste auf die DB (Quellserver) und im Kontextmenü auf Task --> Sichern. So kannst Du eine Datei mit der Endung .bak erstellen. Ein Backup eben. Auf dem Zielserver erstellts Du eine DB mit gleichem Namen und tust sonst erstmal nichts weiter. Dann wieder Rechtsklick auf die neu erstellte DB und Tasks --> Wiederherstellen --> Datenbank. Hier musst Du Dich durch die Wizards hangeln. 2. Möglichkeit Rechtsclick auf DB(Quellserver) Tasks --> Datenbank kopieren. Das geht aber nur wenn beide Server über ein Netzwerk verbunden sind. Was hast Du genau bekommen? Ein Backup (.bak), ein Datenfile (.mdf) ? Bei der Rechtevergabe musst Du beachten, dass die Benutzer auch im Zielserver vorhanden sein müssen. Jeder Benutzer muss über eine Anmeldung am Server und eine Anmeldung an der Datenbank selbst verfügen. Programmierst Du? Wenn ja im .NET Framework (C#, VB .NET usw.)? Dann solltest Du Dich mit ADO .NET beschäftigen um solche Dinge zu realisieren. Zum Thema Berichte... Im SQL Server 2005 Express sind standardmäßig keine Berichtsfunktionalitäten integriert. Es gibt aber auch den "SQL Server 2005 with advanced services"! Der ist ebenfalls kostenlos, bietet aber eine Berichtsfunktionalität (SQL Server Reporting Services). Um das alles mal etwas aufzulockern findest Du auch eine Webcastreihe zum SQL Server. Diese ist kostenlos und hilft Dir vielleicht auch weiter. Hier mal der Link zu einem der Webcasts mit dem Thema Sicherung und Wiederherstellung Microsoft SQL-Server 2005 - Einführung (Teil 9-10) - Sichern und Wiederherstellung, Wartung [MSDN Webcast] Viel Spaß und Gruß, Thomas
  13. Hallo, ja das wundert mich jetzt schon etwas... Das Command zum füllen fürst Du ja aus: private void Form1_Load(object sender, EventArgs e) { // TODO: Diese Codezeile lädt Daten in die Tabelle "feuerwehrverwaltungDataSet.Steckbrief". Sie können sie bei Bedarf verschieben oder entfernen. this.steckbriefTableAdapter.Fill(this.feuerwehrverwaltungDataSet.Steckbrief); } Wenn Du möchtest (und natürlich auch darfst) kannst Du mir das Projekt gerne mal schicken. So eine Ferndiagnose ist natürlich sehr schwer. Aber ich denke es ist nur eine Kleinigkeit. Wie hast Du die Daten genau an die DataGridView gebunden? Du wählst als Datenquelle aber eine "BindingSource" aus, oder?
  14. .NETter

    GridView DeleteEvent

    Hallo, ja das kann ich mir vorstellen, dass hier ein Fehler ausgegeben wird... Woher soll das GridView wissen wie es Änderungen oder Neueinträge verarbeiten soll? Du gibst dem GridView nur ein DataSet mit, aber keine Informationen darüber wie er diese Dinge erledigen soll. Die einfachste Lösung ist eine SqlDataSource wie im Folgenden gezeigt: <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="f_id" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="f_id" HeaderText="f_id" InsertVisible="False" ReadOnly="True" SortExpression="f_id" /> <asp:BoundField DataField="f_name" HeaderText="f_name" SortExpression="f_name" /> <asp:BoundField DataField="f_code" HeaderText="f_code" SortExpression="f_code" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" DeleteCommand="DELETE FROM [Firma] WHERE [f_id] = @f_id" InsertCommand="INSERT INTO [Firma] ([f_name], [f_code]) VALUES (@f_name, @f_code)" SelectCommand="SELECT [f_id], [f_name], [f_code] FROM [Firma]" UpdateCommand="UPDATE [Firma] SET [f_name] = @f_name, [f_code] = @f_code WHERE [f_id] = @f_id"> <DeleteParameters> <asp:Parameter Name="f_id" Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="f_name" Type="String" /> <asp:Parameter Name="f_code" Type="String" /> <asp:Parameter Name="f_id" Type="Int32" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="f_name" Type="String" /> <asp:Parameter Name="f_code" Type="String" /> </InsertParameters> </asp:SqlDataSource> In der Web.config trägst Du den Connectionstring ein. Etwa so: <appSettings/> <connectionStrings> <add name="TestConnectionString" connectionString="Data Source=Servername;Initial Catalog=Datenbankname;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> . . . Dies ist eine einfache aber nicht wirklich empfehlenswerte Lösung. Besser wäre es ein stark typisiertes DataSet und eine ObjectDataSource zu nutzen. Bei der SqlDataSource liegt der SQL-Code direkt in der .aspx-Seite und da sollte man auch nur Oberflächendinge abhandeln. Ein stark typisiertes DataSet kannst Du über "Hinzufügen" im Visual Studio-Projekt (rechte Maustaste auf Projekt --> hinzufügen --> neues Element --> Daten --> DataSet) hinzufügen. Dies kann Dir automatisiert alle SQL Statements generieren die für Insert, Update und Delete benötigt werden. Du kannst hier auch zusätzliche SQL-Befehle für eine Tabelle bzw. TableAdapter hinterlegen. Aber das komplett zu erklären würde den Beitrag sprengen. Hoffe das hilft Dir schon mal weiter! Gruß, Thomas
  15. Hallo, eigentlich könnte man Daten auch in einer einzigen Form ansehen und auch manipulieren. Aber ich kennen ja auch die Anforderungen nicht. In diesem Fall muss Form1 auf die Aktualisierung von Form2 reagieren. Also sobald in Form2 ein Datensatz hinzugefügt wird soll sich Form1 aktualisieren. Prinzipiell weiß Form1 nicht was Form2 so treibt. Form2 muss also ein Event auslösen und Form1 muss darauf reagieren. In Form2 muss muss ein Delegate (typensicherer Funktionszeiger) erstellt werden. Danach wird ein Event vom Typ des Delegates erzeugt. Siehe: public partial class Form2 : Form { public delegate void Aktualisiert_EventHandler(object sender, EventArgs e); public event Aktualisiert_EventHandler AKTUALISIERT; Damit kann Form2 ein Event auslösen. Zum Beispiel beim Click auf einen Button.Das sieht dann so aus: private void cmdSave_Click(object sender, EventArgs e) { //Code zum aktualisieren der DB.. //Jetzt wird das Event ausgelöst AKTUALISIERT(this, EventArgs.Empty); } Jetzt muss Form1 nur noch drauf reagieren können und zwar mit einem Eventhandler. Form2 wird in Form1 instanziert und durch einen Buttonclick angezeigt. public partial class Form1 : Form { Form2 frm2 = new Form2(); public Form1() { InitializeComponent(); //Hier wird der Eventhandler hinzugefügt frm2.AKTUALISIERT += new Form2.Aktualisiert_EventHandler(frm2_AKTUALISIERT); } void frm2_AKTUALISIERT(object sender, EventArgs e) { //Code zur Aktualisierung von Form1 } private void cmdNeuerDatensatz_Click(object sender, EventArgs e) { frm2.Show(); } } Hoffe das hilft Dir weiter! Gruß, Thomas
  16. Hallo, das ist garnicht so wild. Das interessante ist für die die Funktion SaveToDB und File.Copy. Falls Du zum Thema DB-Programmierung etwas lesen möchtest suche mal nach dem Thema "ADO .NET". Viel Erfolg! Ansonsten kannst du auch gerne schreiben wenn Du Fragen hast!
  17. Hallo, so ich habe mal etwas rumgecodet. Ich habe versucht das alles simpel zu halten und so auch auf jeglichen Ansatz von OOP verzichtet. Ich habe den Code aus dem Studio (2008) raus kopiert. Falls irgendwelche "using" Direktiven Fehler bereiten sollten einfach auskommentieren. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Data.SqlClient; using System.IO; namespace _PDF2 { public partial class Form1 : Form { private string m_strPDFURL = "Hier steht Deine Pfadangabe"; private string strPDF = "Hier steht der Name der PDF-Datei"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { DialogResult no = MessageBox.Show("Dokument wurde nicht gefunden.\n\nMöchten Sie im Internet suchen?", "ProgrammName", MessageBoxButtons.YesNoCancel); if (no == DialogResult.Yes) { Process p = new Process(); p = new Process(); p.StartInfo.FileName = m_strPDFURL + strPDF + "nicht wichtig" + "nicht wichtig"; p.Start(); //In DB speichern (Ich benutze den SQL Server 2005 daher der Namespace (oben) using System.Data.SqlClient) if (SaveToDB(m_strPDFURL, strPDF) == 1) MessageBox.Show("Gespeichert"); else MessageBox.Show("Konnte nicht gespeichert werden!"); //In Ordner speichern (Ich nehme an die Variable m_strPDFURL entspricht dem Ordner wo das PDF gespeichert werden soll //using System.IO (siehe oben) string zielPfadUndName = "c:\\Dokumente\\" + strPDF; // Fetsre Ordner + gewählter PDF-Name File.Copy(m_strPDFURL + "\\" + strPDF, zielPfadUndName); } } /// <summary> /// Speichert den Dateipfad und den Dateinamen in der DB /// </summary> /// <param name="Filepath"></param> /// <param name="Filename"></param> /// <returns></returns> private int SaveToDB(string Filepath, string Filename) { //DB-Verbindung (Datenbank und Servername müssen angepasst werden) SqlConnection conn = new SqlConnection("Server=Servername;Database=DB-Name;Integrated Security=True"); SqlCommand command = new SqlCommand("INSERT INTO Tabellenname (Filepath, Filename) VALUES (@filepath, @filename)", conn); //Parameter für das Commandobjekt command.Parameters.Add("@filepath", SqlDbType.NVarChar).Value = Filepath; command.Parameters.Add("@filename", SqlDbType.NVarChar).Value = Filename; try { //Datenbankverbindung öffnen if (conn.State != ConnectionState.Open) conn.Open(); //ExecuteNonQuery gibt automatisch die Anzahl der betroffenen Datensätze zurück if (command.ExecuteNonQuery() == 1) return 1; else return 0; } catch (Exception ex) { MessageBox.Show(ex.Message); return 0; } finally { conn.Close(); } } } } Ein paar Zeilenumbrüche müssten wegen den langen Zeilen noch gerichtet werden. Die Funktion des Speicherns in der DB habe ich in eine Funktion (SaveToDB) ausgelagert. Sieh Dir das mal an und wenn Du noch Fragen hast einfach schreiben. Gruß, Thomas
  18. Ach soooo... Ich wollte erfragen was du damit meinst, dass die PDF´s in der DB gespeichert sind. Also was steht in der DB? Steht dort nur ein Name und irgendein Primärschlüssel, oder wurde die Datei in eine Bytearray umgewandelt und das komplette Dokument (eben als Binärdaten (BLOB - Binary Large OBject)) in der DB abgelegt? Das würd ebedeuten, dass die Datei nicht mehr in einem Filesystem vorhanden ist. (Zur Vollständigkeit: Ja auch hier gibt es Ausnahmen bei manchen DBMS.) Viele speichern nur den physikalischen Pfad (c:\Dokumente\Dok1.pdf) und den Namen zu einem Dokument. Die einzelnen Dokumente liegen dann eben im reellen Filesystem auf dem Server oder irgendwo im Netzwerk und werden dann über die DB-Einträge (Pfadangabe) gefunden. Also wie sieht die Tabelle aus in die du schreiben möchtest? Welche Daten sollen dort genau gespeichert werden? Gruß, Thomas
  19. Hallo, leider habe ich nicht so ganz verstanden wo Du im Internet suchst... Aber egal. Du willst die gefundene Datei jedenfalls in einer DB speichern. Als BLOB oder soll nur Pfad dort abgelegt werden? Ich rate mal und sage Du willst das ganze als BLOB speichern und somit die Binärdaten direkt in der DB speichern. Hier ist mal ein Beispielcode aus meinem Blog zur Speicherung eines Files in eine DB (und umgekehrt): Option Strict On Option Explicit On Imports System.IO Imports System.Data.SqlClient Public Class HandleMyBlob 'Hoher Timeout notwendig! Private m_conn As New SqlConnection("Server=(local);Database=Test;" & _ "Connection Timeout=6000;" & _ "Integrated Security=True") ''' <summary> ''' Speichert die angegebene Datei in einem varbinary(MAX)-Datenfeld ab. ''' </summary> ''' <param name="filePath"></param> ''' <remarks></remarks> Public Sub SaveFileAsBlob(ByVal filePath As String) If My.Computer.FileSystem.GetFileInfo(filePath).Length > 2147483647 Then MessageBox.Show("Datei zu groß! Maximal 2 GB erlaubt.") Exit Sub End If Dim fs As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read) Dim br As BinaryReader = New BinaryReader(fs) 'Folgende Konvertierung kann nicht fehlschlagen da eine 'Dateilänge > 2147483647(MaxWert Integer) oben aussortiert wird Dim fileArr() As Byte = br.ReadBytes(CInt(fs.Length)) br.Close() fs.Close() 'Unten stehende Objekte 'Nothing' setzen damit sie referenzlos stehen br = Nothing fs = Nothing Dim comm As New SqlCommand("Insert Into dbo.BigFiles Values(@datei)", m_conn) comm.Parameters.Add("@datei", SqlDbType.VarBinary).Value = fileArr Try m_conn.Open() comm.ExecuteNonQuery() MessageBox.Show("BLOB gespeichert.", "Speichern erfolgreich", MessageBoxButtons.OK) Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally m_conn.Close() 'Manuelle GarbageCollection anstoßen um RAM frei zu geben 'RAM-Last liegt oft bei 98% GC.Collect() End Try End Sub ''' <summary> ''' Speichert ein BLOB im angegebenen Dateipfad ab ''' </summary> ''' <param name="filePath"></param> ''' <remarks></remarks> Public Sub SaveBlobAsFile(ByVal filePath As String) Dim commGetBlob As New SqlCommand("Select Top 1 blob from dbo.BigFiles", m_conn) Dim fs As FileStream Try m_conn.Open() 'Explizite Konvertierung von Object zu Byte() Dim arrGetBlob() As Byte = CType(commGetBlob.ExecuteScalar(), Byte()) fs = New FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write) Dim bw As New BinaryWriter(fs) bw.Write(arrGetBlob) bw.Flush() bw.Close() arrGetBlob = Nothing bw = Nothing MessageBox.Show("BLOB in Datei gespeichert.", "Speichern erfolgreich", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally m_conn.Close() fs = Nothing GC.Collect() End Try End Sub End Class Der Code hatte ich da leider in VB .NET geschrieben aber kann analog auch in C# umgesetzt werden. Ich habe hier einen SQL Server 2005 benutzt. Für ein anderes DBMS musst Du entsprechende Einträge bearbeiten. Gruß, Thomas
  20. Hallo, wenn die Vorschau die korrekten Daten anzeigt, solltest Du hier eigentlich nichts mehr tun müssen. Propiere mal eine zweite DataGridView an die gleiche Datasource zu hängen und schau mal was dabei raus kommt. Eine DataGridView ist eben eine Dataview und kann gefilter und sortiert werden. Wenn die neue DataGridView im Gegensatz zur ersten etwas anzeigen sollte, dann hast Du irgendeinen Filter gesetzt. Gruß, Thomas
  21. Hallo, Du hättest nur das Intellisense beachten sollen. Die Funktion ReadXML erwartet einen "Filename" als String! Also eben so: XmlDataDocument lxGetXml = new XmlDataDocument(); lxGetXml.DataSet.ReadXml(@"c:\file.xml"); DataTable ldtData = lxGetXml.DataSet.Tables[0]; Dann klappts auch mit dem XML-Dokument. Aber das ganze kannst Du auch kürzer erledigen: DataSet ds = new DataSet(); ds.ReadXml(@"c:\XMLFile.xml"); DataTable ldtData = ds.Tables[0]; So brauchst Du kein XmlDataDocument mehr. Und mit der Methode WriteXML kannst Du das DataSet gleich in eine XML-Datei schreiben. Gruß, Thomas
  22. Hallo, der Codeausschnitt wurde vom VS erstellt, oder? Du benutzt stark typisierte Datasets (strongly typed Datasets). In Deinem Projekt wirst Du eine Datei mit der Endung .xsd finden. Hier sind die Tableadapter definiert und können dort auch über die Oberfläche bearbeitet werden. Dort wirst du eine Art grafische Tabellendefinition. Im unteren Teil dieser Definition steht dann ein Abschnitt mit der Definition des Tableadapters (steckbriefTableAdapter). Hier kannst Du über eine Rechtsclick die Eigenschaften des Tableadapters abrufen. Unetr anderem findest Du hier auch die Connection-Eigenschaft die Du mal untersuchen solltest um sicherszustellen die richtige Access-Datei erwischt zu haben. Kontrolliere auch die darunterstehende Fill/GetData-Methode in der definiert wird wie und welche Daten abgerufen werden sollen. Ansonsten kannst Du auch gerne mal ein Beispielprojekt schicken, dann kann ich da mal den Fehler(?) suchen. Gruß, Thomas
  23. .NETter

    Counter in C++ .NET

    Hallo, habe gerade wohl auch etwas zu schnell überflogen :-) Ich muss mich der Meinung von Gooose anschließen. Threading ist hier das Zauberwort. Ein Thread ist eben eine "Ausästelung" einer laufenden Anwendung. So kannst Du mehrere Dinge (fast) unabhängig voneinander ausführen. Wie Du schon sagtest kannst Du beim Mediaplayer wenn er denn nun läuft (hier haben wir den Hauptthread) auf Play drücken und die Abspielfunktion wird gestartet (neuer Thread). Man sollte sich aber mit grundlegenden Dingen der Threadfunktionalität auskennen. Das Handling ist manchmal ziemlich Tricky! Threads müssen teilweise synchronisiert werden (joinen) wenn ein Thread auf den anderen warten muss oder soll. Oder Du möchtest zum Beispiel immer die aktuelle Position des Liedes im Abspielbalken sehen. Der "Mainthread" weiß aber garnicht was der "Playthread" tut, und so muss der "Playthread" das tun. Aber da die Oberfläche vom "Mainthread" erzeugt wurde darf der "Playthread" die Oberfläche garnicht ändern. Anstatt dessen muss der "Playthread" über Delegates (Typensichere Funktionszeiger) mit dem Mainthread kommunizieren und ihn quasi bitten (über ein Event das der Mainthread konsumiert) eine Funktion in sich selbst aufzurufen (Invoke) um seine Oberfläche zu aktualisieren. Aber lass Dich davon nocht abschrecken! Es lohnt sich dort wirklich mal einzulesen, da man das immer wieder einsetzen kann und sollte (Besonders bei Mehrkernprozessoren!). Ich hoffe ich konnt etwas helfen! Gruß, Thomas PS: Um einfach aus Deiner Schleife auszutreten würde ich einen boolschen Parameter ausserhalb der Schleife deklarieren und mit true initialisieren. Den Wert des Parameters kannst Du dann irgendwo im Programmablauf ändern und somit die Schleife verlassen.
  24. .NETter

    Counter in C++ .NET

    Ich würde es mit einem Objekt vom Typ Stopwatch erlediIm Namespace System.Diagnostic findestdu die Klasse Stopwatch. Gruss Thomas
  25. Hallo! Um die Größe des bildes anzupassen ist am einfachsten aus dem Image-Objekt ein Bitmap zu erstellen, da Du hier die Möglichkeit hast bei der Instanzierung ein Objekt vom Typ Image und eine beliebige Höhe und Breite anzugeben. Siehe Code: OpenFileDialog openFileDialog2 = new OpenFileDialog(); openFileDialog2.InitialDirectory = "c:\\"; openFileDialog2.Filter = "JPG-Dateien (*.jpg)|*.jpg"; openFileDialog2.FilterIndex = 1; openFileDialog2.RestoreDirectory = true; openFileDialog2.Title = "Bilddatei öffnen"; if (openFileDialog2.ShowDialog() != DialogResult.OK) return; string path = openFileDialog2.FileName.ToString(); Image img = Image.FromFile(path); Bitmap bmp = new Bitmap(img, img.Width / 2, img.Height / 2); Clipboard.SetImage(bmp); richTextBox1.Paste(); richTextBox1.Focus(); Ich habe hier die Originalgrößen des Originalbildes einfach durch zwei geteilt um die Proportionen zu erhalten. Kannst hier aber auch einen Slider (Min 1, Max 100) benutzen und die Größe so eben prozentual skalieren. Die Prozentberechnung ersetzt dann eben die Division durch zwei. Hoffe das hilft Dir weiter! Gruß, Thomas

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...