Zum Inhalt springen

Manfred.Becker

Mitglieder
  • Gesamte Inhalte

    148
  • Benutzer seit

  • Letzter Besuch

Beiträge von Manfred.Becker

  1. Hi,

    time_t ist lediglich ein Datentyp (long integer). Instanzvariable dieses Typs werden dazu verwendet die Systemzeit zu speichern.


    #include "stdafx.h"
    #include "time.h"

    int main(int argc, char* argv[])
    {
    time_t ltime;
    struct tm *today;
    char tmpbuf[128];

    _tzset();
    time( &ltime );
    today = localtime( &ltime );
    strftime( tmpbuf, 128, "%Y.%m.%d %H:%M:%S", today );

    printf("Aktuelles Datum=%s\n",tmpbuf);
    return 0;
    }
    [/PHP]

    Das bringt dich nicht weiter.

    Welchen Compiler verwendest du?

    Falls Microsoft, dann gibt's da die [b]Sleep(DWORD dwMilliseconds)[/b] Funktion.

    Falls Borland, dann [b]sleep(unsigned sekunden)[/b]

    Das sollte funktionieren.

  2. Nochmal Hi,

    inzwischen hab ich den Programmers Notepad 2 mal runtergeladen.

    Jetzt ist mir auch klar, warum du es mit cmd versucht hast.

    Die Lösung ist aber eine Batch! Erstelle ein Batchfile (RUN.BAT) und kopiere sie in ein beliebiges Verzeichnis (z.B. c:\data\pn\RUN.BAT).

    Hier der Inhalt der Batchdatei:


    @echo off
    if "%1"=="" goto NOPARAMETER
    call %1 %2 %3 %4 %5
    goto EXIT
    :NOPARAMETER
    echo Es wurden keine Parameter übergeben!
    :EXIT
    pause
    [/PHP]

    Danach erstellt du im Programmers Notepad ein neues Tool:

    Tools->Options->Tool->Add

    Folgende Parameter:

    Name:RUN

    Command:C:\Data\PN\RUN.BAT

    Folder:

    Parameters:"%d%n.exe"

    Console I/O: No Capture output

    Damit lässt sich dann die EXE-Datei starten. :)

  3. Einen Programmierer (egal ob Anfänger oder Profi) zeichet aus,

    wie er mit Fehlermeldungen umzugehen weis.

    Bekomme dann den FehlerCode SQL Closed!!!!

    Das deutet doch ziemlich genau darauf hin, dass auf eine geschlossene Datenbank zugegriffen wurde, oder nicht?

    Wenn du deinen Quelltext genau anschaust wirst du feststellen, dass der Fehler kommen musste, da du versuchst eine SQL-Anweisung abzusetzen bevor die Datenbank geöffnet hast!

    cnSQL = new SqlConnection(Connectionstring);

    cmSQL = new SqlCommand(strSQL, cnSQL);

    cnSQL.Open();

    Dreh das ganze mal herum:

    cnSQL = new SqlConnection(Connectionstring);

    cnSQL.Open();

    cmSQL = new SqlCommand(strSQL, cnSQL);

    Übrigens hatte ich das bereits im ersten Posting so angegeben.

  4. Hi,

    da du bereits eine gültige SqlConnection hast, brauchst du nur noch die Insert-Anweisung als SqlCommand abzusetzen:


    SqlCommand cmSQL;
    String strSQL;
    String ID="4711";
    String Name=txtTest.Text;
    String Firma="Firma YX";
    String Zeitaufwand="0";

    try
    {
    // Build Insert statement
    strSQL = "INSERT INTO [B]ZEIT[/B] (ID,Name,Firma,Zeitaufwand) VALUES (" +
    ID + "," +
    Name + "," +
    Firma + "," +
    Zeitaufwand + ")";


    cmSQL = new SqlCommand(strSQL, sqlConnection1);

    cmSQL.ExecuteNonQuery();

    // Close and Clean up objects
    cmSQL.Dispose();
    }
    catch(SqlException Exp)
    {
    MessageBox.Show(Exp.Message, "SQL Error");
    }
    catch(Exception Exp)
    {
    MessageBox.Show(Exp.Message, "General Error");
    }
    [/PHP]

    Achtung bei dem Beispiel gehe ich davon aus, dass deine Tabelle ZEIT heist!

  5. Hi Mirmi,

    das Problem bei der OnComm Ereignis ist, dass es aufgerufen werden kann, obwohl noch garnicht alle Zeichen übertragen wurden. Damit kann es eben vorkommen, dass du Zeichen übersiehst, wenn du nicht in der OnComm Funktion danach schaust. Ich hatte das mal in VB so gemacht:


    Private Sub MSComm1_OnComm()
    Dim ReceiveData(1024) As Integer
    Dim BytesLeft As Integer
    Dim i As Integer
    Dim nBytes As Integer
    Dim ch As Byte
    Dim strIn As String


    nBytes = 0

    BytesLeft = MSComm1.InBufferCount
    Do While BytesLeft > 0
    strIn = MSComm1.Input
    nBytes = nBytes + 1
    If strIn <> "" Then
    ReceiveData(nBytes) = AscB(strIn)
    Else
    ReceiveData(nBytes) = 0
    End If

    DoEvents
    BytesLeft = MSComm1.InBufferCount
    Loop

    strIn = ""
    For i = 1 To nBytes
    ch = ReceiveData(i)
    Select Case ch
    Case 0 To 31
    If optData(0).Value = True Then
    strIn = strIn & "[" & ch & "]"
    ElseIf optData(1).Value = True Then
    strIn = strIn & "[" & Hex(ch) & "]"
    Else
    strIn = strIn & "."
    End If
    Case 32 To 255
    strIn = strIn & Chr(ch)
    End Select
    Next i

    If strIn <> "" Then
    Call lstData.AddItem(Time$ & " Recv: " & strIn, 0)
    End If
    End Sub
    [/PHP]

    OK, das Beispiel ist jetzt nicht das was du brauchst, und es ist nur VB-Code, aber zwei wichtige Dinge sind zu erkennen:

    1.) Die Prüfung ob's noch Zeichen gibt

    2.) Das Ergebnis ist eine Zusammensetzung der einzelnen Input Daten.

    Ausserdem ist wichtig, die InBufferSize-Eigenschaft auf 1 zu setzen.

    Dadurch ist sichergestellt, dass selbst wenn nur ein Zeichen ankommt, das Ereignis ausgelöst wird.

  6. Hi,

    um Daten in ein Datenbanktabelle zu schreiben muss eine INSERT-Anweisung abgesetzt werden.

    So ähnlich könnte das aussehen:


    private void InsertStatement()
    {
    string Connectionstring = "Server=localhost; DataBase=myDatabase; Integrated Security=SSPI" ;

    SqlConnection cnSQL;
    SqlCommand cmSQL;
    SqlDataReader drSQL;
    String strSQL;

    try
    {
    // Build Insert statement
    strSQL = "INSERT mytable VALUES (" +
    txtField1.Text + "," +
    txtField2.Text + "," +
    txtField3.Text + ")";

    cnSQL = new SqlConnection(Connectionstring);

    cnSQL.Open();

    cmSQL = new SqlCommand(strSQL, cnSQL);

    cmSQL.ExecuteNonQuery();

    // Close and Clean up objects
    drSQL.Close();
    cnSQL.Close();
    cmSQL.Dispose();
    cnSQL.Dispose();
    }
    catch(SqlException Exp)
    {
    MessageBox.Show(Exp.Message, "SQL Error");
    }
    catch(Exception Exp)
    {
    MessageBox.Show(Exp.Message, "General Error");
    }
    }
    [/PHP]

    myDatabase und myTable sind natürlich nur Beispielwerte!

    Ganz ähnlich geht's für die SQL-Anweisungen UPDATE, INSERT, DELETE usw.

    Ich denke, da kommst du jetzt selbst dahinter.

    PS:

    Der Quellcode wurde von mir stark abgeändert. Das Orginal stammt von:

    Microsoft 101 Visual Basic and C# Code Samples

  7. Hi Snipero2,

    Aber ich weiß den Befehl zum lesen und updaten der Dateien nicht!

    Du bist wohl noch ganz am Anfang was Datenbank-Programmierung angeht?

    Deshalb rate ich dir ein paar Tutorials bzw. Bücher zu SQL im Netz zu suchen, und diese durchzuarbeiten. Du brauchst unbedingt die Grundlagen!

    Dennoch will ich dir ein paar Anhaltspunkte geben, wie man das mit VB.NET realisieren könnte (es gibt noch andere Ansätze).

    Die notwendigen Optionen und Imports fügst du ganz am Anfang in deinem Modul ein (Form1.vb)


    Option Strict On
    Option Explicit On

    Imports System.Data
    Imports System.Data.SqlClient
    [/PHP]

    Die DB-Verbindung wird über einen Connection-String definiert. Hier ein Beispiel für die Northwind Datenbank, die ja bei jeder MSSQL-Installation automatisch angelegt wird.

    [PHP]
    Public Class Form1
    Inherits System.Windows.Forms.Form

    Protected Const SQL_CONNECTION_STRING As String = _
    "Server=localhost;" & _
    "DataBase=Northwind;" & _
    "Integrated Security=SSPI;Connect Timeout=5"

    Private ConnectionString As String = SQL_CONNECTION_STRING

    So sieht eine typische Funktion aus:


    Private Sub SelectStatement()

    Dim cnSQL As SqlConnection
    Dim cmSQL As SqlCommand
    Dim drSQL As SqlDataReader
    Dim strSQL As String
    Dim strValue As String
    Dim intValue As Integer


    Try
    ' Open the Database
    cnSQL = New SqlConnection(ConnectionString)
    cnSQL.Open()

    ' Build Select statement to query Category Name from the Categories table.
    strSQL = "SELECT CategoryID, CategoryName FROM Categories"
    cmSQL = New SqlCommand(strSQL, cnSQL)
    drSQL = cmSQL.ExecuteReader()

    ' Loop through the result
    Do While drSQL.Read()
    strValue = drSQL.Item("CategoryName").ToString()
    intValue = CInt(drSQL.Item("CategoryID"))
    Loop

    ' Close and Clean up objects
    drSQL.Close()
    cnSQL.Close()
    cmSQL.Dispose()
    cnSQL.Dispose()

    Catch e As SqlException
    MsgBox(e.Message, MsgBoxStyle.Critical, "SQL Error")

    Catch e As Exception
    MsgBox(e.Message, MsgBoxStyle.Critical, "General Error")
    End Try

    End Sub
    [/PHP]

    Ganz ähnlich geht's für die SQL-Anweisungen UPDATE, INSERT, DELETE usw.

    Ich denke, da kommst du jetzt selbst dahinter.

    PS:

    Der Quellcode wurde von mir etwas abgeändert. Das Orginal stammt von:

    Microsoft 101 Visual Basic and C# Code Samples

  8. Hi,

    Was gibt es noch für Alternativen, an Datenbanken, die keine zusätzlichen Programme/Server benötigen?

    keine!

    Wenn du auf zusätzliche Programme (Access/MSSQL/MySQL/Oracle usw.) verzichten willst, bleiben eigentlich nur Textdateien (*.csv, *.xml) oder die Registry.

    Allerdings würde ich die Registry nicht zum Ablegen solcher Daten missbrauchen. Obwohl das einfach und schnell geht, kommen da meiner Meinung nach nur Konfigurationsdaten rein.

    Bleiben also CSV-Dateien (Cursor-Seperated-Files) oder XML-Dateien, von denen ich XML-Dateien im .NET klar den Vorzug gebe.

  9. Hi Bukker,

    also das mit dem Programm immer im Vordergrund halten ist kein Problem.

    dazu gibts die Eigenschaft:

    MainForm->FormStyle = fsStayOnTop;

    Allerdings wirst du mit deinem Programm nicht die Kontrolle über das Betriebsystem übernehmen können!

    Wenn du also den Computer sperren willst, schreib doch einen Bildschirmschoner. Bei dem kann dann die Passwortsperre aktiviert werden :D

  10. Hi,

    keine Sorge, tabelle.EOF funktioniert schon.

    Das Problem bei deiner Abfrage ist, das beim letzten Datensatz ein MoveNext gemacht wird, und danach ohne Gültigkeitsabfrage der Zugriff erfolgt!!!!

    Machs besser so:


    If tabelle.EOF Then Exit Sub
    tabelle.MoveNext
    If Not tabelle.EOF Then
    TNr.Text = tabelle("nr")
    TBezeichnung.Text = tabelle("bezeichnung")
    TPreis.Text = tabelle("preis")
    TZutat.Text = tabelle("zutat")
    TMwSt.Text = tabelle("mwst")
    End If
    [/PHP]

  11. Hi,

    also, wenn man über die IDE eine neue Klasse hinzufügt, wird für diese auch ein neues Modul (CPP-Datei + Header-Datei) angelegt. Der Dateiname entspricht (im Allgemeinen) dem Klassennamen ohne das führende C (z.B. Klasse CMyClass -> MyClass.cpp + MyClass.h).

    Das muss man aber nicht für ALLE Klassen machen, die im Projekt verwendet werden.

    Mal angenommen du willst ein Programm schreiben, das Logische Gatter simuliert. Da gibt's ja jede Menge unterschiedlicher Typen (AND,NAND,OR,NOR,NOT usw.). Damit ist klar, das du 'ne Basisklasse für die Logik brauchst (1.Modul). Auch eine Basisklasse für die Darstellung ist notwendig (2.Modul). Es wäre aber übertrieben, für die einzelnen Gattter, die von den Basisklassen abgeleitet werden, jeweils ein Modul zu verwenden. Die landen also alle in einem Modul (3.Modul).

    Aber das war nur EIN Beispiel. Immer dann wenn dein Quellcode zu unübersichtlich (zu gross) wird, solltest du dir Gedanken machen, diesen in meherer Module zu Teilen.

    Das mit den Makefiles must du dir anlesen. Ich kann dir nur soviel sagen, dass darin die Abhängigkeiten der einzelnen Module, die Anweisungen für den Compiler, und die Anweisungen für den Linker stehen.

    Das wird, je mehr Module Verwendung finden, umso aufwendiger.

    Wenn du den steinigen Weg gehen willst, tue das. Für einfache Konsolenanwendungen wirst du auch ganz gut damit klarkommen.

    Sobald du aber die erste Windows-Applikation schreibst, rate ich dir ausschliesslich die IDE zu verwenden. ;)

  12. Hi,

    'ne dll kannst du entweder im Header (*.h)

    #import "my.dll" no_namespace

    oder im Modul (*.cpp)

    m_hMyLib = LoadLibrary("my.dll");

    einbinden.

    Dann benötigst du die Header-Datei der DLL, in der die ganzen Typ-Definitionen stehen.

    Weitere Infos findest du über die F1-Hilfe.

  13. Hi,

    so wie ich dich verstanden habe, willst du deinen (riesigen) Quellcode in mehrere Dateien aufteilen.

    Als ich hab da meinen Quellcode und so, der ist mir aber zu lang, also möcht ich ein paar Funktionen in einer Headerdatei auslagern, damit alles etwas übersichtlicher wird.

    Diese Dateien sind nicht zwangsläufig nur Header Dateien (*.h bzw *.hpp), sondern eben auch C-Dateien (*.c bzw *.cpp), die ich hier mal als Module bezeichnen will.

    Diese Vorgehensweise findet meine vollste Unterstützung!

    Folgendes musst du beachten.

    Alle Funktionen die vom Thema her zusammengehören in einem Modul zusammenfassen. Zu jedem Modul eine gleichnamige Header-Datei erstellen.

    In jedem Modul das Funktionen eines anderen Modul nutzt, ein #include "modulxxx.h" einfügen, sonst meckert der Compiler.

    Da du ja alles von Hand machst, und der Linker nicht wissen kann was nun zu tun ist, muss du eine Make-Datei (*.mak) erstellen.

    Die EXE-Datei erstellst du dann mit make <makefile>

    Allerdings spricht nichts dagegen die IDE zu verwenden. Alle oben beschriebenen manuellen Arbeiten werden dir abgenommen, und du kannst dich auf das Wesentliche (die Programmierung) konzentrieren...

  14. alles was in der DOS-Box mittels SET aufgelistet wird sind die sog. Umgebungsvariable.

    Diese liefert bereits die Parameter der main-Funktion.

    Hier ein Beispiel (Turbo C++):


    #include <string.h>
    #include <stdio.h>

    #define GOOD 0
    #define BAD 1

    int main( int argc, char *argv[], char *env[] )
    {
    int retWert=BAD;
    int i;

    /* In argv[0] steht immer der aufgerufene Programmname, */
    /* auch dann, wenn kein Parameter angegeben wurde. */
    printf("\nProgramm: %s\n",argv[0]);


    if (argc>1)
    {
    retWert=GOOD;

    printf("\nDie Übergabeparameter sind:\n");
    for (i=1; i<argc; i++)
    printf("- argv[%d] = %s\n",i,argv[i]);

    }
    else
    printf("\nKeine Parameter angegeben.\n");

    /* In env[] stehen alle DOS-Umgebungsvariablen. */
    /* Diese wurden im DOS mit dem SET-Befehl gesetzt. */
    if (env[0]!=NULL)
    {
    printf("\n\nDie DOS-Umgebungsvariablen sind:\n");
    for (i=0; env[i]!=NULL; i++)
    printf("- env[%d] = %s\n",i,env[i]);
    }
    else
    printf("\n\nKeine DOS-Umgebungsvariablen definiert.\n");


    return(retWert); /* Dieser Return-Wert kann in Batch-Dateien mittels */
    /* ERRORLEVEL abgefragt werden. */
    /* Bsp.: IF ERRORLEVEL 1 ECHO Fehler */
    }
    [/PHP]

  15. Hi,

    anhand der Beschreibung des Interfaces zu meinem Link dachte ich das wäre was für dich:

    Interfaces

    The IPersistStream interface provides methods for saving and loading objects that use a simple serial stream for their storage needs. The IPersistStream interface inherits its definition from the IPersist interface, and so includes the GetClassID method of IPersist. The interfaces are defined in objidl.h. To implement IPersistStream in our class, we need to define it in our project first. In the native code, the Load and Save method of IPersistStream takes IStream as input parameter. Its equivalent in managed world is UCOMIStream.

    Aber von welcher Klasse kommt denn die Methode RemoteRead(). Darüber kann ich überhaupt nichts finden.

  16. Hi Vampire,

    also wenn's nur das ist.

    Kontrolliere folgende Eigenschaften von deinem MSComm-Objekt:

    1.) CommPort=1

    2.) InputLen=1

    3.) InputMode=1 (commInputModeText)

    4.) RThreshold=1

    5.) Settings=9600,n,8,1

    Dann muss noch die EreignisRoutine OnComm() ausprogrammiert sein (Doppelclick auf dein MSComm-Objekt.

    Sende das Zeichen ENQ:

    MSComm1.Output = Chr(&H5&)

    Die Antwortdaten landen in:

    MSComm1.Input

  17. Hi Horrido,

    das hier liefert die F1-Hilfe:

    This function is provided for compatibility with 16-bit Windows. Win32-based applications should use the CreateProcess function.

    Remarks

    In Win32, the WinExec function returns when the started process calls the GetMessage function or a time-out limit is reached. To avoid waiting for the time out delay, call the GetMessage function as soon as possible in any process started by a call to WinExec.

    Du solltest deshalb besser CreateProcess() verwenden.

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