+ Auf Thema antworten
Seite 1 von 8 1 2 3 4 5 ... LetzteLetzte
Zeige Ergebnis 1 bis 10 von 72

Thema: Der große Programmiererstrang

  1. #1
    Mitglied Benutzerbild von Klopperhorst
    Registriert seit
    27.11.2005
    Beiträge
    80.640

    Standard Der große Programmiererstrang

    Was hier fehlt, ist noch ein großer Programmierer-Strang. Da es im Forum ja einige gibt, können wir uns hier über nette Technologien unterhalten, Source-Code und Links austauschen.

    Ich fange mal an.

    SQLITE

    Gestern habe ich einen C++ Wrapper für SQLITE implementiert. Ich kann nur sagen, eine GEILE library.

    [Links nur für registrierte Nutzer]

    Der C Code kann in einer einizigen großen C-Datei mitgelinkt werden.

    Die SQL-Engine arbeitet im Gegensatz zu Server-Systemen mit lokalen Dateien, auf die man mit Standard SQL-Befehlen zugreift. Unterstützt werden Views, Transaktionen Typ1, Funktionen, Trigger. Man kann das System mit eigenen Callbacks und Funktionen ziemlich erweitern. Grunddatentypen sind STRING (500 Zeichen), BLOB, INT64, DOUBLE64 IEEE.

    Hier übrigens meine Implementierung eines SQL-Statements in einer generischen abgeleiteten Klasse.

    Code:
    #ifndef _SQLITE_WSQLSTATEMENT_H
    #define _SQLITE_WSQLSTATEMENT_H
    
    #include "../WSQLStatement.h"
    #include "SQLITE_WSQLBase.h"
    
    // prototype
    class SQLITE_WSQLConnection;
    
    /*
     SQLITE_WSQLStatement
     
     Implementation of an SQLITE statement.
    
    */
    
    class _WLIBAPI SQLITE_WSQLStatement : public WSQLStatement, public SQLITE_WSQLBase
    {
    
    public:
    
        SQLITE_WSQLStatement ();
        SQLITE_WSQLStatement (const SQLITE_WSQLConnection* connPnt);
        SQLITE_WSQLStatement (const SQLITE_WSQLConnection* connPnt, const WString& sqlStr);
        virtual ~SQLITE_WSQLStatement ();
    
        virtual void         init            (const SQLITE_WSQLConnection* connPnt);
        virtual void         init            (const SQLITE_WSQLConnection* connPnt, const WString& sqlStr);
        virtual void         close           ();
    
        // Column management
        virtual void         setColumnCount  (W32 cnt);
        virtual W32          getColumnCount  (bool fFromResult=false) const;
        virtual void         getColumnInfo   (W32 pos, ColumnInfo& columnInfo) const;
        virtual void         setColumn       (W32 pos, DataType dataType, W32 size);
        virtual void         setColumnFloat  (W32 pos);
        virtual void         setColumnNumber (W32 pos);
        virtual void         setColumnString (W32 pos, W32 size=255);
        virtual void         setColumnArray  (W32 pos, W32 size);
        virtual void         setColumnDate   (W32 pos);
        virtual void         bind            ();
    
        // Parameter management for prepared statements
        virtual void         setParamString  (W32 pos, const WString& str);
        virtual void         setParamNumber  (W32 pos, int value);
        virtual void         setParamFloat   (W32 pos, double value);
        virtual void         setParamArray   (W32 pos, const W8* array, W32 size);
        virtual void         setParamDate    (W32 pos, const WDate& date);
    
        // Execution
        virtual bool         executeQuery    (const WString& sqlStr);
        virtual bool         executeUpdate   (const WString& sqlStr);
        virtual bool         executeQuery    ();
        virtual bool         executeUpdate   ();
    
        // Fetching result data
        virtual bool         fetch           ();
        virtual W32          getRowCount     ();
        virtual WCCSTR       getString       (W32 pos) const;
        virtual int          getNumber       (W32 pos) const;
        virtual double       getFloat        (W32 pos) const;
        virtual const WDate& getDate         (W32 pos) const;
        virtual const W8*    getArray        (W32 pos) const;
        virtual W32          getSizeBytes    (W32 pos) const;
        virtual W32          getLastInsertId () const;
    
    protected:
        sqlite3_stmt* m_hStmt;
    private:
        class ColumnDef
        {
        public:
            ColumnDef ();
           ~ColumnDef ();
            void init (W32 pos, DataType dataType, W32 length);
            W32 m_pos;
            DataType m_dataType;
            WString m_buf;
        };
    
    
        const SQLITE_WSQLConnection* m_connPnt;
        W32 m_colCnt, m_paramCnt;
        ColumnDef* m_colDefList;
        void bindColumn (ColumnDef& column);
        void checkColumnPos (W32 pos) const;
        void checkParamPos (W32 pos) const;
        void initialize ();
        mutable WDate m_date;
    
    };
    
    #endif /* _SQLITE_WSQLSTATEMENT_H */
    Geändert von Klopperhorst (20.07.2008 um 11:02 Uhr)
    "Groß ist die Wahrheit, und sie behält den Sieg" (3. Esra)

  2. #2
    Mitglied Benutzerbild von Klopperhorst
    Registriert seit
    27.11.2005
    Beiträge
    80.640

    Standard AW: Der große Programmiererstrang

    Hier eine kurze Programmiereinführung für SQLITE, SELECT+INSERT. Sowas findet man im Netz kaum, daher stell ich das mal hier rein.

    Code:
    // DB öffnen oder neu erstellen
    int retCode = 0;
    sqlite3* hDB;
    retCode = sqlite3_open_v2(
    	// SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, SQLITE_OPEN_READONLY
    	DB_FILENAME, &hDB, SQLITE_OPEN_READWRITE, NULL);
    if (retCode!=SQLITE_OK) {
    	printError (hDB, "Cannot create SQLITE connection.", retCode, true);
    }
    else
    {
    
    	sqlite3_stmt* hStmt;
    
    	WCSTR pzTail = NULL;
    
    	// SELECT operation
    	WString sql = "select * from test";
    	retCode = sqlite3_prepare_v2(
    		hDB,
    		(WCSTR) sql,
    		sql.length (),
    		&hStmt,
    		&pzTail
    		);
    	if (retCode!=SQLITE_OK) 
    	{
    		printError (hDB, "Cannot create prepared statement.", retCode, true);
    	}
    
    	bool fFetch = true;
    	while (fFetch)
    	{
    		retCode = sqlite3_step(hStmt);
    		switch (retCode) 
    		{
    			case SQLITE_ROW:
    				// Ergebnis-Zeile
    				printf ("%u Spalten\r\n", (W32) sqlite3_data_count(hStmt)); // Anzahl Spalten im Ergebnis
    				// printf ("%s\r\n", (WCSTR) sqlite3_column_decltype(hStmt,0)); // Datentypname der 1. Spalte
    				// printf ("%u\r\n", (WCSTR) sqlite3_column_type(hStmt,0)); // Datentyp-ID der 1. Spalte
    				
    				// sqlite3_column_origin_name = Name der Spalte, geht nur, wenn 
    				// Präprozessor SQLITE_ENABLE_COLUMN_METADATA aktiviert.
    				printf ("%s: %s\r\n", (WCSTR) sqlite3_column_origin_name(hStmt,0), (WCSTR) sqlite3_column_text   (hStmt, 0));
    				printf ("%s: %s\r\n", (WCSTR) sqlite3_column_origin_name(hStmt,1), (WCSTR) sqlite3_column_text   (hStmt, 1));
    				printf ("%s: %f\r\n", (WCSTR) sqlite3_column_origin_name(hStmt,2), (double)   sqlite3_column_double (hStmt, 2));
    				printf ("%s: %i\r\n", (WCSTR) sqlite3_column_origin_name(hStmt,3), (int)   sqlite3_column_int (hStmt, 3));
    				printf ("%s: %f\r\n", (WCSTR) sqlite3_column_origin_name(hStmt,4), (double)   sqlite3_column_double (hStmt, 4));
    				printf ("---------\r\n\r\n");
    				break;
    			case SQLITE_DONE:
    				fFetch=false;
    				break;
    			case SQLITE_BUSY:
    				printf ("SQLITE_BUSY\r\n");
    				sqlite3_sleep(100);
    				break;
    			case SQLITE_ERROR:
    				printf ("SQLITE_ERROR: %i / %s\r\n",
    					(int) sqlite3_errcode(hDB), (WCSTR) sqlite3_errmsg (hDB));
    				fFetch=false;
    				break;
    			case SQLITE_MISUSE:
    				printf ("SQLITE_MISUSE\r\n");
    				fFetch =false;
    				break;
    		}
    	};
    	retCode = sqlite3_finalize(hStmt);
    	hStmt = NULL;
    
    	// Vorbereitetes Statement mit INSERT (?=Platzhalter für Parameter)
    	sql = "insert into test (a,b,c,d,j) values  (?,?,?,?,?)";
    	retCode = sqlite3_prepare_v2(
    		hDB,
    		(WCSTR) sql,
    		sql.length (),
    		&hStmt,
    		&pzTail
    		);
    	if (retCode!=SQLITE_OK) 
    	{
    		printError (hDB, "Cannot create prepared statement.", retCode, true);
    	}
    	WString firstname = "Schopenhauer", timestamp = "1800-01-01 00:00:00";
    	// SQLITE_TRANSIENT erzeugt eine Kopie des Parameters im Speicher
    	sqlite3_bind_text   (hStmt, 1, (WCSTR) firstname, firstname.length (), SQLITE_STATIC); // SQLITE_TRANSIENT 
    	sqlite3_bind_text   (hStmt, 2, (WCSTR) timestamp, timestamp.length (), SQLITE_STATIC);
    	sqlite3_bind_double (hStmt, 3, (double) 99.999);
    	sqlite3_bind_int    (hStmt,	4, (int) 88);
    	sqlite3_bind_double (hStmt,	5, (double) 88.2883998282); // Wird automatisch gerundet, wenn Spalte z.B.B NUMBER(10,5)
    	// sqlite3_clear_bindings (hStmt);
    	
    	fFetch = true;
    	while (fFetch)
    	{
    		retCode = sqlite3_step(hStmt);
    		switch (retCode) 
    		{
    			case SQLITE_ROW:
    				printf ("SQLITE_ROW\r\n");
    				break;
    			case SQLITE_DONE:
    				printf ("%u rows changed (last insert row id=%u)\r\n", 
    					(W32) sqlite3_changes (hDB),
    					(W32) sqlite3_last_insert_rowid (hDB));
    				fFetch=false;
    				break;
    			case SQLITE_BUSY:
    				printf ("SQLITE_BUSY\r\n");
    				sqlite3_sleep(100);
    				break;
    			case SQLITE_ERROR:
    				printf ("SQLITE_ERROR: %i / %s\r\n",
    					(int) sqlite3_errcode(hDB), (WCSTR) sqlite3_errmsg (hDB));
    				fFetch=false;
    				break;
    			case SQLITE_MISUSE:
    				printf ("SQLITE_MISUSE\r\n");
    				fFetch =false;
    				break;
    		}
    	};
    
    	retCode = sqlite3_reset (hStmt);
    	
    	// Nach sqlite3_reset kann man neu 'inserten'
    
    	// Statement schließen
    	retCode = sqlite3_finalize(hStmt);
    	hStmt = NULL;
    
    	
    	retCode = sqlite3_close (hDB);
    	hDB = NULL;
    }
    Geändert von Klopperhorst (20.07.2008 um 11:21 Uhr)
    "Groß ist die Wahrheit, und sie behält den Sieg" (3. Esra)

  3. #3
    marc
    Gast

    Standard AW: Der große Programmiererstrang

    Wie wird man denn Programmierer? Was hast du, wenn überhaupt, dafür studiert?

    Und was wären so ein paar ganz konkrete Beispiele von dem, was du tust. Was bewirken z.B. diese Formeln, die du gerade gepostet hast. Wie läuft das ab, wer wendet sich an dich und was erwarten die dann von dir?

  4. #4
    forward ever Benutzerbild von Lichtblau
    Registriert seit
    14.02.2007
    Ort
    soviet solar system
    Beiträge
    19.530

    Standard AW: Der große Programmiererstrang

    Wenn ich C++ Code sehe wird mir spei übel. Ich programmiere am liebsten in C#.

  5. #5
    Mitglied
    Registriert seit
    15.08.2005
    Beiträge
    38.121

    Standard AW: Der große Programmiererstrang

    Und ich sollte bis zu 170 TDM bezahlen, weil ich meine software angebl. nicht hinlänglich kommentiert habe, igitt. Das war dann der Einstieg in den berufl. Ausstieg.
    Ich muß nur deswegen nix zahlen, weil mir vorher vom Kläger dafür sog. "hervorragende Leistungen" attestiert wurden.
    Ging vor allem um Airbus-Bugradar und Nato-Militärrechner.
    Dazu mußte man nix studieren, allerdings ET/NT kapieren.
    Auch bei Siemens UB Med Kernspintomographie hab ich bissl Mathesoftware hinterlassen - Bildverstärker, Breitbandrichtkoppler, HF-Vorverstärker und Equipments für Kopf-, Körper- und Gradientenspulen.
    ISDN-layer und Handy-Empfangsbuffer waren auch noch Softwareschmankerln.
    Es brachte nix, weswegen ich nu hier sitze und über Software schimpfe ;-)
    Ach so, die Sprachen: Assembler, Fortran (Diplomarbeit über militärische Flugkörper in deren Endphase ;-) ), Pascal-Delphi, C/C++.
    Geändert von politisch Verfolgter (20.07.2008 um 13:16 Uhr)
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen." Joseph Weizenbaum
    GmbHler sind RufmordGift, Arbeitsverträge sind Pest, Arbeitsrichter verhöhnen SozialstaatsOpfer.

  6. #6
    Haßkrimineller Benutzerbild von wtf
    Registriert seit
    31.10.2005
    Beiträge
    22.311

    Standard AW: Der große Programmiererstrang

    Zitat Zitat von Tschuikow Beitrag anzeigen
    Wenn ich C++ Code sehe wird mir spei übel.
    Dann hast Du noch nie Assembler gesehen.
    "When the people fear the government, that´s tyranny. When the government fears the people, that´s freedom." Thomas Jefferson

  7. #7
    Haßkrimineller Benutzerbild von wtf
    Registriert seit
    31.10.2005
    Beiträge
    22.311

    Standard AW: Der große Programmiererstrang

    Ich backe nach dem großen Klopperhorst mal ganz kleine Brötchen:

    Wer PHP programmiert, Mails verschicken, aber kein Framework wie PEAR oder ZEND installieren möchte, ist mit der [Links nur für registrierte Nutzer] bestens bedient.

    Valide Header werden quasi automatisch erstellt, HTML-Mails (bäh!), Anhänge usw.: Alles Einzeiler.
    "When the people fear the government, that´s tyranny. When the government fears the people, that´s freedom." Thomas Jefferson

  8. #8
    Ouzo-Cola Benutzerbild von Skaramanga
    Registriert seit
    15.08.2006
    Ort
    Attika
    Beiträge
    23.378

    Standard AW: Der große Programmiererstrang

    PERL rulez !

    { $tmp .= "\$$key = \$ENV{'$key'};" if $key =~ /^[A-Za-z]\w*$/; }

  9. #9
    Mitglied
    Registriert seit
    15.08.2005
    Beiträge
    38.121

    Standard AW: Der große Programmiererstrang

    Das auch bitte für jede Ziffer einzeln ;-)
    Macht jemand lustige CSS-Geschichten mit javascript?
    Expandiert man das nach html, läufts auch mit abgeschaltetem js.
    Gibt freewares, die SQL in excel sheets konvertieren und umgekehrt.
    Geändert von politisch Verfolgter (20.07.2008 um 14:00 Uhr)
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen." Joseph Weizenbaum
    GmbHler sind RufmordGift, Arbeitsverträge sind Pest, Arbeitsrichter verhöhnen SozialstaatsOpfer.

  10. #10
    Mitglied
    Registriert seit
    17.11.2007
    Beiträge
    13.069

    Standard AW: Der große Programmiererstrang

    Zitat Zitat von marc Beitrag anzeigen
    Wie wird man denn Programmierer? Was hast du, wenn überhaupt, dafür studiert?

    Und was wären so ein paar ganz konkrete Beispiele von dem, was du tust. Was bewirken z.B. diese Formeln, die du gerade gepostet hast. Wie läuft das ab, wer wendet sich an dich und was erwarten die dann von dir?
    Also ich hab ein Praktikum in einem Labor gemacht, Kabel löten und sowas.
    Aus interesse hab ich so geschaut was die anderen treiben und die haben
    C++ programmiert.
    Hallo LEUTE
    Hiermit möchte ich klarstellen das ich ein Hauptschüler bin, und in Fächer wo Einstein vorkam nie bestanden hab.

+ Auf Thema antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Das große ß ist da
    Von Schwarzer Rabe im Forum Freie Diskussionen
    Antworten: 43
    Letzter Beitrag: 29.06.2008, 12:29
  2. Programmiererstrang
    Von Klopperhorst im Forum Freie Diskussionen
    Antworten: 3
    Letzter Beitrag: 29.09.2006, 09:32
  3. Der große Nazitest
    Von Biskra im Forum Freie Diskussionen
    Antworten: 24
    Letzter Beitrag: 18.12.2005, 15:45
  4. Der große Wahkampfstrang
    Von WALDSCHRAT im Forum Parteien / Wahlen
    Antworten: 6
    Letzter Beitrag: 18.09.2005, 19:18

Nutzer die den Thread gelesen haben : 0

Du hast keine Berechtigung, um die Liste der Namen zu sehen.

Forumregeln

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
nach oben