| |
|
|
Christof Neuß | Ciao,
mal wieder eine Frage zu SQL mit einer Access-Datenbank im Hintergrund. Ich möchte einfach die Felder UND DEREN ART einer bestimmten Tabelle abfragen.
In VBA geht das wohl so:
Wie kann ich das denn übersetzen? Oder kennt jemand eine andere Möglichkeit? |
|
|
| |
|
|
|
| Ich zumindest habe von Access-Datenbanken und VBA keine Ahnung. ^^ |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Ich bin's mal wieder
window 600,600
def %SQL_HANDLE_STMT 3
def %SQL_NTS -3
var File$="D:\Archive\Einstellungen\Alcatel 701\Nachricht.mdb"
var Name$="Inbox"
var Init$="Driver={Microsoft Access Driver (*.mdb)};Dbq="+File$
var Command$="SELECT TOP 1 * FROM "+Name$
db("SQLInit",Init$)
declare Handle&
external("odbc32.dll","SQLAllocHandle",%SQL_HANDLE_STMT,&SQLDBC,addr(Handle&))
external("odbc32.dll","SQLExecDirect",Handle&,Command$,%SQL_NTS)
declare Count&
external("odbc32.dll","SQLNumResultCols",Handle&,addr(Count&))'--Anzahl Felder
declare Text#:dim Text#,255
declare a&,b&,c&,d&,e&
whileloop 1,Count&
cls
external("odbc32.dll","SQLDescribeCol",Handle&,&loop,Text#,255,addr(a&),addr(b&),addr(c&),addr(d&),addr(e&))
external("oleaut32.dll","VarI4FromI2",b&,addr(b&))'--Umwandlung von SHORT nach LONG
print "Index ",&loop
print "Name ",string$(Text#,0)
print "NameLength ",a&
print "DataType ",b&
print "ColumnSize ",c&
print "DecimalDigits ",d&
print "Nullable ",e&
print
print "<ENTER>"
waitkey
endwhile
print "Fertig"
external("odbc32.dll","SQLFreeHandle",%SQL_HANDLE_STMT,Handle&)
db("SQLDone")
dispose Text#
waitkey
end
'
'Hinweis:
'DataType ist vom Typ SQLSMALLINT
'Bei negativen Werten wird darum beim Auslesen das Vorzeichen-Bit nicht korrekt umgesetzt!
'Umwandlung von SHORT nach LONG ist nötig!
SQL_UNKNOWN_TYPE =0;
SQL_CHAR =1;
SQL_NUMERIC =2;
SQL_DECIMAL =3;
SQL_INTEGER =4;
SQL_SMALLINT =5;
SQL_FLOAT =6;
SQL_REAL =7;
SQL_DOUBLE =8;
SQL_DATETIME =9;
SQL_TIME =10;
SQL_TIMESTAMP =11;
SQL_VARCHAR =12;
SQL_LONGVARCHAR =(-1);
SQL_BINARY =(-2);
SQL_VARBINARY =(-3);
SQL_LONGVARBINARY =(-4);
SQL_BIGINT =(-5);
SQL_TINYINT =(-6);
SQL_BIT =(-7);
window 600,600
$H Windows.ph
$H ocx3a.ph
$I ocx3a.inc
ocxInit()
var File$="D:\Archive\Einstellungen\Alcatel 701\Nachricht.mdb"
var Name$="Inbox"
var Connect$="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+File$
var Command$="Select TOP 1 * from "+Name$
var Rec&=ocxCreate("ADODB.Recordset")
ocxMethod(Rec&,"Open",Command$,Connect$)
var Fields&=ocxget(Rec&,"Fields")'---"Fields" ohne Parameter: Fields-Collection
var Count%=ocxGet(Fields&,"Count")'--Anzahl Felder in Collection
ocxRelease(Fields&)
declare Feld&
whileloop 0,Count%-1
cls
Feld&=ocxGet(Rec&,"Fields",&loop)'--"Fields" mit Parameter: einzelne Felder nach 0-Index
print "Index : ",&loop
print "Name : ",ocxGet(Feld&,"Name")
print "Type : ",ocxGet(Feld&,"Type")
print "Value : ",left$(ocxGet(Feld&,"Value"),40)'--Inhalt auf 40 Zeichen gekürzt
print "DefinedSize: ",ocxGet(Feld&,"DefinedSize")'------Deklarierte Dimensione
print "ActualSize : ",ocxGet(Feld&,"ActualSize")'-------Verwendete Dimensione
print
print "<ENTER>"
ocxRelease(Feld&)
waitkey
endwhile
ocxMethod(Rec&,"Close")
ocxRelease(Rec&)
ocxDeInit()
print "Fertig"
waitkey
end
'Werte per DataTypen bei MSDN unter
'https://msdn.microsoft.com/en-us/library/windows/desktop/ms675318(v=VS.85).aspx
Offtopic @ iF: Leerzeilen im Quelltext wären hilfreich
HTH Pascal |
|
|
| |
|
|
|
Christof Neuß | Und wieder bin ich durch Dich einen Schritt weiter.
DANKE!!!! |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Nico Madysa | [OFFTOPIC] Zeilen, nicht Zeichen, iF. declare zwischendiesenzeilen%
print "gibt es keinen Abstand!"
[/OFFTOPIC] |
|
|
| |
|
|
|
| Oh! Ja, naturalmente -
Fonte werden ja gezeilt ^^ -
bau ich wieder ein Flag per ein.
Es gibt (aber) auch den Quelltextmerker wenn man 1:1-Fonte braucht: [...] |
|
|
| |
|
|