Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > C/C++, Visual C++, Visual C++.NET

C/C++, Visual C++, Visual C++.NET Fragen und Antworten zu C/C++, Visual C++ und Visual C++.NET

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50849, Antworten: 1390
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26615, Antworten: 4194
Gehe zum ersten neuen Beitrag Windows Oberfläche (Schrift,...
Aufrufe: 176, Antworten: 10
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 63, Antworten: 5
Gehe zum ersten neuen Beitrag TabCtrl
Aufrufe: 121, Antworten: 12
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 93, Antworten: 4
Gehe zum ersten neuen Beitrag Dateien lassen sich nicht...
Aufrufe: 17, Antworten: 2
Gehe zum ersten neuen Beitrag Suche Programm um Werbung zu...
Aufrufe: 49, Antworten: 2
Gehe zum ersten neuen Beitrag McAfee AVERT Stinger...
Aufrufe: 13, Antworten: 0
Gehe zum ersten neuen Beitrag Sticky Password 6.0.2...
Aufrufe: 25, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06.02.2006, 14:39   #1 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 31.08.2005
Ort: Passau
Beiträge: 196
Standard Zugriff auf Access Datenbank mit MFC

Hallo

weiss jemand von euch wie ich mit einer MFC anwendung auf eine Access datenbank zugreifen kann? Ich will von den tabellen Daten auslesen können und in der MFC Anwendung verarbeiten können. Gibts dazu irgendwo n tutorial?

ich hatte auch mal nen link zu nem guten mfc tutorial, aber den hab ich leider vergessen (Azubi will mit mfc anfangen und findet kein gutes). könnt ihr mir da bitte eins empfehlen?

mfg
danjal ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 08.02.2006, 17:07   #2 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

Du den Tutorials,
hier in diesem Unterforum gibt es schon einiges an Links zu diesem Thema.
Oder hier http://msdn.microsoft.com/library/default.asp
In einigen dieser tutorials findest du auch etwas über Datenbanken.
Hier mal kurz die schritte, so wie ich sowas im normalfall mache:

Irgendwo bei der Initialierung der Klasse, aber nicht unbedingt im Constructor, das führt evtl. zu Problemen bei Fehlermeldungen
PSEUDOCODE,NICHT LAUFFÄHIG!!!
Code:
void Cxyz::Cxyz()
{
myDatebaseObj=NULL;
}
void Cxyz::~Cxyz()
{
if(myDatebaseObj!=NULL)
{
if(myDatebaseObj->IsOpen())
myDatebaseObj->Close();
delete myDatebaseObj;
}
}

void Cxyz::Init()
{
myDatebaseObj= new CDaoDatabase;
myDatebaseObj->Open("c:\\datenbank.mdb");
}
void Cxyz:Somefunc()
{
COleVariant data;
CDaoRecordset rec(myDatabaseObj);
rec.Open(dbOpenDynaset,"SELECT Geburtstag FROM Persons WHERE Stadt=-Hamburg");
while(!rec->'IsEOF())
{
rec.GetFieldValue("Geburtstag",data);
//Bei dem Colevariant musst du mal selber nachsehen wwie man da den Typ und den Wert abfragt)
if(rec.type!=VT_EMPTY)
 printf("Geburtstag:%i",rec.VT_UI1);
}
rec.close();
}
So das wäre so eine Möglichkeit, du KÖNNTEST auch den Assisten für Datenbankabfragen verwenden, aber damit kommst du nicht besonders weit.
Den Code der oben steht habe ich so eingetippt , also wird der Syntax nicht stimmen.
Optimierungen und so sind auch nicht vorhanden, es kann unter umständen auch sinnvoll sein nur einen Zeiger auf ein RecordSet Object zu haben und diesen immer neu zuzuweisen, ähnlich wie mit dem Databaseobject.
Das mit dem Database object als Zeiger klassenelement ist zwar nicht unbedingt notwendig, bringt evtl. Geschwindigkeitsvorteile (EIN Recordset Object evtl. auch, dieses immer wieder neu erstellen öffnen der einzelnen Objekte braucht ZEIT.

Du KANNST dir auch mal ADO durchlesen, bei Accessdatenbanken macht das die Sache nur komplziert und bringt wenig vorteile..)

Peter

Peter
lastwebpage ist offline   Mit Zitat antworten
Alt 14.02.2006, 12:05   #3 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 31.08.2005
Ort: Passau
Beiträge: 196
Standard

hallo

danke erst mal für die hinweise.
ich kann jetz eine verbindung zur datenbank herstellen. Aber ich versteh nicht ganz wie ich auf die einzelnen tabellenelemente zugreifen kann.

angenommen ich hab eine Tabelle "Test". Darin sind 3 Spalten A B und C, mit jeweils 3 Zeilen. Wie kann ich jetz z.b. auf das Feld A1 zugreifen, bzw diesen wert z.b. in einer CString variable speichern?

mfg

danjal
danjal ist offline   Mit Zitat antworten
Alt 14.02.2006, 12:28   #4 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

Wie gesagt es gibt mehrere Möglichkeiten, das mit der SQL Abfrage ist nur eine unter vielen. Der Vorteil davon ist das du Querverbindungen, Auswahlen, Sortierungen etc. direkt bei der Abfrage ausführen kannst.

Wenn du so wie du das machst die Taelle stückweise ohne irgendwelchen sonstigen Regeln, z.B Alle Felder A wo B=2 ist, ist das mit SQL Befehlen vielleicht nicht die allerbeste lösung bei sehr großen Tabellen, da jedesmal die komplette Spalte A übertragen wird.
Sie notwendigen SQL Befehle kannst du aber relativ einfach mittels Acces ermitteln und testen (Abfrage->Rntwurf->SQL Ansicht)

Zu deinem Problem, der Befehl müsste lauten
"Select A From Test"
CString str;
CDaoRecordset rec(myDatabaseObj);
rec.Open(dbOpenDynaset,"Select A From Test"); //rec enthält die gesamte Spalte A
while(!rec->'IsEOF())
{
rec.GetFieldValue("A,data);
if(data.vt!=VT_EMPTY)
str=data.bstrVal;
}

(PSEUDOCODE!! Syntaxfehler etc. wharscheinlich!)
Peter
lastwebpage ist offline   Mit Zitat antworten
Alt 14.02.2006, 15:17   #5 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 31.08.2005
Ort: Passau
Beiträge: 196
Standard

danke dir.
habs endlich geschafft daten auszulesen

bin total begeistert.

Hab aber schon wieder ein problem.

kann ich in diese SQL abfrage auch variablen einbauen? á la

int test = 0;

Select Number from Tabelle WHERE test = 1 ??

mfg

danjal
danjal ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 14.02.2006, 15:36   #6 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

Warum nicht ?
z.B. char strSQL[256];
sprintf(str, "SELECT A FROM DatabaseName where B=%i", 100);
rec.Open(dbOpenDynaset,strSQL);

Geht natürlich auch mit CString

Peter
lastwebpage ist offline   Mit Zitat antworten
Alt 15.02.2006, 08:02   #7 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 31.08.2005
Ort: Passau
Beiträge: 196
Standard

Ich danke dir Peter

du hast mir wirklich sehr viel weitergeholfen

mfg

Danjal
danjal ist offline   Mit Zitat antworten
Alt 15.02.2006, 08:56   #8 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

ach habe glaube ich was vergessen, um den ganzen recordset zu durchlaufen:
while(!rec->'IsEOF())
{
rec.GetFieldValue("A,data);
if(data.vt!=VT_EMPTY)
str=data.bstrVal;
rec.MoveNext();
}
lastwebpage ist offline   Mit Zitat antworten
Antwort

  Paules-PC-Forum.de > Programmierung > C/C++, Visual C++, Visual C++.NET

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an




Alle Zeitangaben in WEZ +2. Es ist jetzt 05:43 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2