Manfred.Becker
-
Gesamte Inhalte
148 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von Manfred.Becker
-
-
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( <ime );
today = localtime( <ime );
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.
-
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.
-
-
Hi,
wozu brachst du cmd.exe um deine exe zu starten?
Lass einfach die cmd.exe weg.
-
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.
-
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!
-
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.
-
Hi,
ist auf dem anderen Rechner bereits das .Net Framework installiert?
Wenn nein, dann installiere das mal zu Fuß, ich weis nämlich nicht, ob InstallShield das für dich macht.
-
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:
-
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_STRINGSo 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:
-
Hi,
das geht mit Format->Bedingten Formatierung...
Einfach eine Formel hinzufügen.
-
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.
-
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
-
-
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] -
Hi,
es gibt eine super Forensuche!
Da kannst du einfach nach "Buch Empfehlung" suchen lassen...
-
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.
-
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.
-
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...
-
-
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] -
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.
-
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
-
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.
Widerstandsmessung per DIO Karte
in C und C++
Geschrieben
Ist das eine Hardware- oder Softwarefrage?