Avatar billede bernhof Nybegynder
31. januar 2002 - 14:35 Der er 23 kommentarer og
1 løsning

Få fat på tabeller i database

Hvordan kan jeg få fat på hvilke tabeller, der findes i en database samt deres beskrivelse vha. et ADODB.Connection objekt?
Avatar billede dimle Nybegynder
31. januar 2002 - 14:40 #1
Det kan du gøre på recordsettet der til!

Dim rs as ADODB.Recordset

Navnet på første felt i recordsettet rs = rs.Fields(0).Name
Avatar billede bernhof Nybegynder
31. januar 2002 - 14:42 #2
jeg mener ikke felter i tabeller, men tabeller i databasen.
Avatar billede telep Nybegynder
31. januar 2002 - 14:44 #3
Public datdb As Database

Private Sub Form_Load()
Dim tdf As TableDef


Set datdb = DBEngine.Workspaces(0).OpenDatabase("sti til din database")

For Each tdf In datdb.TableDefs
   
    If InStr(1, tdf.Name, "MSys", vbTextCompare) = 0 Then
        lstTabel.AddItem tdf.Name
    End If
Next tdf

End Sub

Tilføj referencen Microsoft DAO 3.6 objekt library.

Lav en listbox og kald den lstTabel, så kan du kopiere præcis min kode ind!

Prøv det det er for cool!
Avatar billede bernhof Nybegynder
31. januar 2002 - 14:47 #4
Ok, det lyder godt, men jeg vil gerne have det gjort gennem et ADODB.Connection objekt, som jeg skriver i spørgsmålet ... er dette muligt? hvis ja - hvordan?
Avatar billede telep Nybegynder
31. januar 2002 - 14:53 #5
Jeg er ikke ferm i ado'en - bruger kun dao...

Hvorfor vil du absolut have ado ?
Avatar billede bernhof Nybegynder
31. januar 2002 - 14:56 #6
fordi hele mit program er opbygget omkring dette ADODB.Connection objekt - og det vil jeg gerne have at det bliver ved med at være! :)
Avatar billede dimle Nybegynder
31. januar 2002 - 15:00 #7
Ja undskyld... jeg misforstod spørgsmålet! Du kan ikke gøre det med ADODB!!!
Avatar billede telep Nybegynder
31. januar 2002 - 15:09 #8
Præcis derfor må du bruge DAO... Du kan jo bare til denne ting vælge at bruge DAO...

Jeg skal nok guide dig.... jeg er (med fare for at lyde stor i slaget) mester på området!
Avatar billede bernhof Nybegynder
31. januar 2002 - 15:26 #9
Altså der er noget der hedder ADODB.OpenSchema, med denne metode er det muligt at hente felt-navne i tabeller, men det må da også være muligt at hente tabel-navne ...
Dimle > er du 100% sikker på at man ikke kan, eller går du bare ud fra det?

telep > jeg vil meget gerne bede om din hjælp, hvis jeg på ingen måde kan hente tabel-navne gennem ADODB.Connection, så husk at kigge forbi spørgsmålet en gang imellem! :)
Avatar billede bernhof Nybegynder
31. januar 2002 - 15:28 #10
Undskyld - ikke ADODB.OpenSchema, men:

Dim CONN As New ADODB.Connection
Dim RS As New ADODB.Recordset

Set RS = Conn.OpenSchema([div. arguments])
Avatar billede telep Nybegynder
31. januar 2002 - 15:35 #11
Selvfølgelig!

By the way, når du åbner et et recordset med ado så har du jo fat i éen tabel og ikke databasen som sådan!
Avatar billede bernhof Nybegynder
31. januar 2002 - 15:55 #12
Jeg fandt ud af noget:
----------------------

Dim CONN As New ADODB.Connection
Dim RS As New ADODB.Recordset

Set RS = CONN.OpenSchema(adSchemaTables)

Do Until RS.EOF
    If Not RS("TABLE_NAME") Like "MSys*" Then _
        lstMain.ListItems.Add , , RS("TABLE_NAME")
    RS.MoveNext
Loop

RS.Close

--------------------
Så mangler jeg bare at kunne hente beskrivelsen af tabellen, som man kan indtaste i Access, hvis man højre-klikker på en tabel, og vælger Properties/Egenskaber. Nogle idéer?

telep > er det muligt med DAO at hente denne beskrivelse?
Avatar billede bernhof Nybegynder
31. januar 2002 - 15:56 #13
(lstMain er en ListView control i Common Controls 6.0)
Avatar billede telep Nybegynder
31. januar 2002 - 16:09 #14
ja!
Avatar billede bernhof Nybegynder
31. januar 2002 - 16:17 #15
Ok, jeg tror jeg bliver nødt til at benytte DAO, så vil du fortælle mig hvordan?
Avatar billede bernhof Nybegynder
01. februar 2002 - 16:12 #16
Du viser i dit eksempel, hvordan man henter tabellernes navne, men hvordan henter man beskrivelserne af tabellerne?
Avatar billede bernhof Nybegynder
02. februar 2002 - 15:08 #17
telep?
Avatar billede bernhof Nybegynder
06. februar 2002 - 18:11 #18
telep?
Avatar billede jhc Nybegynder
07. februar 2002 - 13:14 #19
Var
  TypeField, NameField : TField;
  Dataset : TADODataset;

begin 
Dataset := TADODataset.Create(Self);
With ADOConnection 1 do
begin
    .close;
    // Kald database med connectionstring
    .connectionstring := ParamStr(1);
  // åben databaseschema og retuner data i dataset
    .OpenSchema(sitables,emptyparam,emptyparam,dataset);
    // Retuner  info om tabel type samt navn
    TypeField := DataSet.FieldByName('TABLE_TYPE');
      NameField := DataSet.FieldByName('TABLE_NAME');
    // så lang tid der er data i basen
      while not DataSet.EOF do
      begin
        TableType := TypeField.AsString;
        // Hvis der er tale om en tabel eller en forespørgsel
        if (TableType = 'TABLE') or (TableType = 'VIEW') or
          (SystemTables and (TableType = 'SYSTEM TABLE')) then
          begin
            // Et eller andet felt som man kan tilføje data til.
            DBComboBox9.Items.add(NameField.AsString);
          end;
        DataSet.Next;
      end;
    Dataset.Free;
end;
Ovenståede er Delphi men jeg håber at du kan bruge noget derfra.
Avatar billede jhc Nybegynder
07. februar 2002 - 13:16 #20
TSchemaInfo values indicate the type of schema information to retrieve.

Unit

ADOdb

type
TSchemaInfo = (siAsserts, siCatalogs, siCharacterSets, siCollations, siColumns, siCheckConstraints, siConstraintColumnUsage, siConstraintTableUsage, siKeyColumnUsage, siReferentialConstraints, siTableConstraints, siColumnsDomainUsage, siIndexes, siColumnPrivileges, siTablePrivileges, siUsagePrivileges, siProcedures, siSchemata, siSQLLanguages, siStatistics, siTables, siTranslations, siProviderTypes, siViews, siViewColumnUsage, siViewTableUsage, siProcedureParameters, siForeignKeys, siPrimaryKeys, siProcedureColumns, siDBInfoKeywords, siDBInfoLiterals, siCubes, siDimensions, siHierarchies, siLevels, siMeasures, siProperties, siMembers, siProviderSpecific);

Description

Use TSchemaInfo values to specify the type of schema information to retrieve from a provider.

The constants that make up the TSchemaInfo type correspond directly to the ADO constants used for the QueryType parameter for the OpenSchema method of the ADO Connection object. For additional information on these ADO constants and their effects, see the Microsoft Data Access SDK help in the topic for the OpenSchema method of the ADO Connection object.

A TSchemaInfo value may be any of the constants below:

Schema Parameter Value    ADO Criteria Values

siProviderSpecific    The provider defines its own nonstandard schema queries outside those listed below.
siAsserts    CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
siCatalogs    CATALOG_NAME
siCharacterSets    CHARACTER_SET_CATALOG
CHARACTER_SET_SCHEMA
CHARACTER_SET_NAME
siCollations    COLLATION_CATALOG
COLLATION_SCHEMA
COLLATION_NAME
siColumns    TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
siCheckConstraints    CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME

siConstraintColumnUsage    TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
siConstraintTableUsage    TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
siKeyColumnUsage    CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
siReferentialConstraints    CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
siTableConstraints    CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE

siColumnsDomainUsage    DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
COLUMN_NAME
siIndexes    TABLE_CATALOG
TABLE_SCHEMA
INDEX_NAME
TYPE
TABLE_NAME
siColumnPrivileges    TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTOR
GRANTEE
siTablePrivileges    TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
GRANTOR
GRANTEE
siUsagePrivileges    OBJECT_CATALOG
OBJECT_SCHEMA
OBJECT_NAME
OBJECT_TYPE
GRANTOR
GRANTEE
siProcedures    PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMTER_TYPE

siSchemata    CATALOG_NAME
SCHEMA_NAME
SCHEMA_OWNER
siSQLLanguages    None.
siStatistics    TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
siTables    TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
siTranslations    TRANSLATION_CATALOG
TRANSLATION_SCHEMA
TRANSLATION_NAME
siProviderTypes    DATA_TYPE
BEST_MATCH
siViews    TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
siViewColumnUsage    VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
siViewTableUsage    VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
siProcedureParameters    PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMTER_NAME

siForeignKeys    PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
FK_TABLE_CATALOG
FK_TABLE_SCHEMA
FK_TABLE_NAME
siPrimaryKeys    PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
siProcedureColumns    PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
COLUMN_NAME
siDBInfoKeywords    (Defined in OLE DB, but not supported by ADO.)
siDBInfoLiterals    (Defined in OLE DB, but not supported by ADO.)
siCubes    (Defined in OLE DB, but not supported by ADO.)
siDimensions    (Defined in OLE DB, but not supported by ADO.)

siHierarchies    (Defined in OLE DB, but not supported by ADO.)
siLevels    (Defined in OLE DB, but not supported by ADO.)
siMeasures    (Defined in OLE DB, but not supported by ADO.)
siProperties    (Defined in OLE DB, but not supported by ADO.)
siMembers    (Defined in OLE DB, but not supported by ADO.)

Ovenstående fandt jeg i hjælpen til ADO
Avatar billede bernhof Nybegynder
07. februar 2002 - 15:17 #21
jhc >> jeg kan ikke lige se hvor i koden du henter beskrivelsen af tabellen... ?
Avatar billede jhc Nybegynder
07. februar 2002 - 16:08 #22
det gøres i  linien

.OpenSchema(sitables,emptyparam,emptyparam,dataset
Avatar billede bernhof Nybegynder
09. februar 2002 - 12:26 #23
ok, jeg takker .. du får point, hvis der ikke kommer noget i Visual Basic, som jeg kan "overskue"! :)
Avatar billede bernhof Nybegynder
13. marts 2002 - 22:06 #24
hmm ... ked af det, men jeg finder på noget andet, da jeg ikke får noget videre respons... lukker spm.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester