preise für datenbanksysteme



  • Hier mal meine DLL

    sensorme.de/dateien/databaselibodbc.zip

    Einfach nur in ein Programm die header einbinden
    Ist aber noch Betastatus

    #include "databaselibodbc.h"

    CODBCDatabase m_databaseconnect;
    
    	if (m_databaseconnect.connected == false)
    	{
    		switch (m_databaseconnect.connect("hierdeindatasourcename"))
    		{
    			case DB_CONNECTION_BAD:
    				return ;
    			break;
    
    			case DB_CONNECTION_OK:
    			break;
    		}
    
    	}
    
    	CString commando = "SELECT * FROM deintablename";
    	switch (m_databaseconnect.sqlexecute(commando))
    	{
    		case DB_COMMAND_ERROR:
    
    		return ;
    
    		case DB_COMMAND_OK:
    		return ;
    		case DB_EMPTY_QUERY:
    
    		return ;
    		case DB_SELECT_OK:
    			m_databaseconnect.field[1]; // Das erste Feld
    			m_databaseconnect.field[2]; // Das zweite Feld u.s.w
    
                while(m_databaseconnect.fetch() != DB_FETCH_EMPTY)
    			{
                                 // Hier die nächsten Rows bis zum ende 
    
    			m_databaseconnect.field[1]; // Das erste Feld
    			m_databaseconnect.field[2]; // Das zweite Feld u.s.w
    			}
    
    			break;
    	}
    


  • okay, das siehst schon mal gut aus!

    CODBCDatabase m_databaseconnect; 
    
        if (m_databaseconnect.connected == false) 
        { 
            switch (m_databaseconnect.connect("hierdeindatasourcename")) 
            { 
                case DB_CONNECTION_BAD: 
                    return ; 
                break; 
    
                case DB_CONNECTION_OK: 
                break; 
            } 
    
        } 
    
        CString commando = "SELECT * FROM deintablename"; 
        switch (m_databaseconnect.sqlexecute(commando)) 
        { 
            case DB_COMMAND_ERROR: 
    
            return ; 
    
            case DB_COMMAND_OK: 
            return ; 
            case DB_EMPTY_QUERY: 
    
            return ; 
            case DB_SELECT_OK: 
                m_databaseconnect.field[1]; // Das erste Feld 
                m_databaseconnect.field[2]; // Das zweite Feld u.s.w 
    
                while(m_databaseconnect.fetch() != DB_FETCH_EMPTY) 
                { 
                                 // Hier die nächsten Rows bis zum ende  
    
                m_databaseconnect.field[1]; // Das erste Feld 
                m_databaseconnect.field[2]; // Das zweite Feld u.s.w 
                } 
    
                break; 
        }
    

    nur damit ich es alles richtig verstehe...

    hierdeindatasourcename

    kann doch zum beispiel.mdb sein?

    bis

    case DB_SELECT_OK:
    

    ist alles klar.

    wieso steht da jetzt?

    m_databaseconnect.field[1]; // Das erste Feld 
                m_databaseconnect.field[2]; // Das zweite Feld u.s.w
    
    while(m_databaseconnect.fetch() != DB_FETCH_EMPTY) 
                { 
                                 // Hier die nächsten Rows bis zum ende  
    
                m_databaseconnect.field[1]; // Das erste Feld 
                m_databaseconnect.field[2]; // Das zweite Feld u.s.w 
                }
    

    und wieso steht das jetzt noch mal da?

    vermute jetzt einfach die tabele sieht dann so aus:
    | 1 | 2 |
    ---------------------
    | abc | xyz |

    habe mir die header datei angeschaut. eine indizierung mit strings ist nicht möglich? ist jetzt aber nur eine nebenfrage. das ist ja nicht von bedeutung!

    wie kann ich denn dann jetzt ein "insert" absetzen? oder noch einfacher, m_databaseconnect.field[2], das ist doch vom typ CString... okay die einfachere frage habe ich mir gerade auch selbst beantwortet. damit könnte ich jetzt nach dem fetch() irgendein EDIT element füllen.

    das schaut gut aus!



  • Du legst mit Windows und den Access-Treiber ien Datasource an.

    m_databaseconnect.connect("hierdeindatasourcename"))

    wenn dein Table 5 Spalten hat dann macht ein select * from table

    field[1] - field[5] voll.
    Es gibt zwar auch field[0] aber das bleibt leer und vereinfacht das verständniss von Anzahl spalten und den fields

    Ein
    select spalte1,spalte2 from table;

    füllt nur field[1] und field[2]

    Mit jedem Fetch steht in den fields etwas anderes drin oder sie sind eben leer.

    Ein Insert oder Update wird auch der execute übergeben. Nur das eben dann nicht select_ok sonder command_ok zurückkommt.

    Diese Wrapper habe ich eigentlich nur schnell mal zusammen geschrieben da ich die gleiche Schnittstelle haben wollte wie meine MYSQL-Wrapper.
    Nur das ODBC nicht so schöne features bietet wie z.B. die Anzahl der abgefragten Datensätze.



  • also nur numerische indizierung. gut, verstanden! danke dir!

    wenn ich jetzt ein insert absetzen möchte, kann ich es dann so machen?
    hab das folgende aber nicht getestet, nur deins verändert...

    CODBCDatabase m_databaseconnect;  
    
        if (m_databaseconnect.connected == false)  
        {  
            switch (m_databaseconnect.connect("hierdeindatasourcename"))  
            {  
                case DB_CONNECTION_BAD:  
                    return ;  
                break;  
    
                case DB_CONNECTION_OK:  
                break;  
            }  
    
        }  
    
        CString commando = "INSERT INTO deintablename (spalte1, spalte2) VALUES ('"+str_Eins+"', '"+str_Zwei+"')";  
        switch (m_databaseconnect.sqlexecute(commando))  
        {  
            case DB_COMMAND_ERROR:  
    
            return ;  
    
            case DB_COMMAND_OK:  
            return ;  
            case DB_EMPTY_QUERY:  
            return ; 
            break;  
        }
    


  • ja
    genau so



  • ich habe jetzt 3 tabellen geplant. eine tabelle hat ziemlich viele spalten. gibt es eine möglichkeit um die .mdb bequem einzurichten? vielleicht grafisch? oder muss ich dafür access benutzen?

    also eine .mdb ist eine datenbankdatei. hoffe es ist nicht eine einzelne tabelle.

    kann man auch einen dump erstellen? gibt es irgendwelche log möglichkeiten? ich habe im odbc treiber optionen für die komprimierung und optimierung der datenbank gesehen. taugen sie etwas? kann man sie über die api irgendwie ansprechen? gibt es dazu dokumentationen? wie sind da die stichpunkte für?



  • Die MDB-Datei ist die Datenbankdatei. Es werden aber auch alle Dinge gespeichert die Acces braucht. Tabellen (hatten wir ja schon),Abfragen,Berichte, etc.



  • na gut, dann werde ich die tabellen manuell zusammenstellen. access besitze ich leider nicht.

    was ist denn mit diesen optionen zur optimierung / indizierung? taugt das etwas? wie kann man das benutzen?



  • unix-tom, hab leider ein problem. kann mein projekt mit deiner klasse nicht compilieren.

    der compiler schreibt folgendes:

    ...\databaselibodbc.h(82) : warning C4251: 'CODBCDatabase::m_ColArray': class 'CPtrArray' erfordert eine DLL-Schnittstelle, die von Clients von class 'CODBCDatabase' verwendet wird
    D:\visualcpp\Vc7\atlmfc\include\afxcoll.h(367): Siehe Deklaration von 'CPtrArray'

    ...\databaselibodbc.h(102) : warning C4251: 'CODBCDatabase::field': class 'ATL::CStringT<BaseType,StringTraits>' erfordert eine DLL-Schnittstelle, die von Clients von class 'CODBCDatabase' verwendet wird
    with
    [
    BaseType=char,
    StringTraits=StrTraitMFC<char>
    ]

    CDialogDB.obj : error LNK2019: Nicht aufgelöstes externes Symbol '"__declspec(dllimport) public: int __thiscall CODBCDatabase::connect(class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > >)" (__imp_?connect@CODBCDatabase@@QAEHV?CStringT@DV?CStringT@DV?StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z)', verwiesen in Funktion '"public: void __thiscall CDialogDB::OnBnClickedBtDb(void)" (?OnBnClickedBtDb@CDialogDB@@QAEXXZ)'

    ich habe die lib in der linker liste hinzugefügt und die header eingebunden. wenn ich das projekt dann neu compiliere kommen diese fehler.
    was muss ich noch tun, um deine dll verwenden zu können?



  • @unix-tom:
    ich benutze vc++.net 2003. release mode. in deine header datei habe ich auch schon mal reingeschaut und folgendes versucht:

    /*#ifndef _DATABASELIBODBC_API_NOAUTOLIB_
    #ifdef _DEBUG
    #pragma comment(lib, "databaselibodbc.lib")
    #else*/
    #pragma comment(lib, "databaselibodbc.lib")
    //#endif
    //#endif
    

    hat aber auch nichts gebracht.



  • zumindest teilweise erfolge erzielt!

    im debug modus läufts.

    in der header datei:

    #ifndef _DATABASELIBODBC_API_NOAUTOLIB_
    #ifdef _DEBUG
    #pragma comment(lib, "databaselibodbc.lib")
    #else
    #pragma comment(lib, "databaselibodbc.lib")
    #endif
    #endif
    

    und dann einen button on klick versehen mit:

    if (m_databaseconnect.connected == false) 
        { 
            switch (m_databaseconnect.connect("user")) 
            { 
                case DB_CONNECTION_BAD: 
                    MessageBox("BAD");
                break; 
    
                case DB_CONNECTION_OK: 
    				MessageBox("oki");
                break; 
            } 
    
        }
    

    es kommt ein "oki". das freut mich schon mal sehr!!!

    aber jetzt komme ich mit dem konfigurationsmenü von devenv nicht klar. anscheinend liegt da der fehler.

    kannst du mir eine richtige konfiguration nennen, sonst muss ich alles mögliche ausprobieren. dazu gesagt, ich habe seit der installation daran nichts verändert.


Anmelden zum Antworten