Как программно перебрать все таблицы и поля БД Access? (DAO) #291283


#0 by Gepard
Как программно перебрать все таблицы и поля (можно только поля) БД Access? и как создать, изменить поле, таблицу?
#1 by Gepard
просто никогда с таким не сталкивался...
#2 by Sonic
было на башорге - "я еще и преподаю, очень тяжело после баша, что поставить в домашнем задании, "2" или "ппц"" :) (не дословно но суть....)
#3 by mikecool
у акцеса нету мастер-базы?
#4 by Gepard
черт его знает... :)
#5 by Gepard
с MSSQL все просто...
#6 by Sonic
тут выбора нет, это ппц. родной. в КЗ или БЗ загляни для начала :) уже столько про это проходили
#7 by Sonic
Считается дурным тоном, если управляющий начнет выяснять, кто допустил брак. Главное (...)не в том, чтобы найти виновного, а в том чтобы выявить причины ошибки. (с) Акио Морита. основатель Сони
#8 by Sonic
+7 делай и не ошибешься. ищущий да обрящет
#9 by jbond
Sub TableDefX   Dim dbsNorthwind As Database   Dim tdfNew As TableDef   Dim tdfLoop As TableDef   Dim prpLoop As Property   Set dbsNorthwind = OpenDatabase("Northwind.mdb")   ' Create new TableDef object, append Field objects   ' to its Fields collection, and append TableDef   ' object to the TableDefs collection of the   ' Database object.   Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef")   tdfNew.Fields.Append tdfNew.CreateField("Date", dbDate)   dbsNorthwind.TableDefs.Append tdfNew   With dbsNorthwind      Debug.Print .TableDefs.Count & _         " TableDefs in " & .Name      ' Enumerate TableDefs collection.      For Each tdfLoop In .TableDefs         Debug.Print "  " & tdfLoop.Name      Next tdfLoop      With tdfNew         Debug.Print "Properties of " & .Name         ' Enumerate Properties collection of new         ' TableDef object, only printing properties         ' with non-empty values.         For Each prpLoop In .Properties            Debug.Print "  " & prpLoop.Name & " - " & _               IIf(prpLoop = "", "[empty]", prpLoop)         Next prpLoop      End With      ' Delete new TableDef since this is a      ' demonstration.      .TableDefs.Delete tdfNew.Name      .Close   End With End Sub
#10 by jbond
Sub CreateTableDefX   Dim dbsNorthwind As Database   Dim tdfNew As TableDef   Dim prpLoop As Property   Set dbsNorthwind = OpenDatabase("Northwind.mdb")   ' Create a new TableDef object.   Set tdfNew = dbsNorthwind.CreateTableDef("Contacts")   With tdfNew      ' Create fields and append them to the new TableDef      ' object. This must be done before appending the      ' TableDef object to the TableDefs collection of the      ' Northwind database.      .Fields.Append .CreateField("FirstName", dbText)      .Fields.Append .CreateField("LastName", dbText)      .Fields.Append .CreateField("Phone", dbText)      .Fields.Append .CreateField("Notes", dbMemo)      Debug.Print "Properties of new TableDef object " & _         "before appending to collection:"      ' Enumerate Properties collection of new TableDef      ' object.      For Each prpLoop In .Properties         On Error Resume Next         If prpLoop <> "" Then Debug.Print "  " & _           prpLoop.Name & " = " & prpLoop         On Error GoTo 0      Next prpLoop      ' Append the new TableDef object to the Northwind      ' database.      dbsNorthwind.TableDefs.Append tdfNew      Debug.Print "Properties of new TableDef object " & _         "after appending to collection:"      ' Enumerate Properties collection of new TableDef      ' object.      For Each prpLoop In .Properties         On Error Resume Next         If prpLoop <> "" Then Debug.Print "  " & _           prpLoop.Name & " = " & prpLoop         On Error GoTo 0      Next prpLoop   End With   ' Delete new TableDef object since this is a   ' demonstration.   dbsNorthwind.TableDefs.Delete "Contacts"   dbsNorthwind.Close
#11 by Gepard
Спасибо, уже разобрался
#12 by Gepard
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using DAO; namespace MDB {    public partial class Form1 : Form    {        public Form1        {            InitializeComponent;        }        private void button1_Click(object sender, EventArgs e)        {            DAO.DBEngine myE = new DBEngine;            if (!System.IO.File.Exists(@"c:123.mdb"))                myE.CreateDatabase(@"c:123.mdb", ";LANGID=0x0409;CP=1252;COUNTRY=0", 32);            DAO.Database мояБаза = myE.OpenDatabase(@"c:123.mdb", false, false, ";PWD=''");            DAO.Recordset myRec = мояБаза.ListTables; // Обход всех таблиц            int Счетчик = 0;            while (!myRec.EOF)            {                if (Счетчик == 0)                ДобавитьСтроку(myRec.Fields[0].Name + ", " + myRec.Fields[1].Name + ", " + myRec.Fields[2].Name + ", " + myRec.Fields[3].Name + ", " + myRec.Fields[4].Name + ", " + myRec.Fields[5].Name);                ДобавитьСтроку(myRec.Fields[0].Value.ToString + ", " + myRec.Fields[1].Value.ToString + ", " + myRec.Fields[2].Value.ToString + ", " + myRec.Fields[3].Value.ToString + ", " + myRec.Fields[4].Value.ToString + ", " + myRec.Fields[5].Value.ToString);                                myRec.MoveNext;                Счетчик++;            }            myRec = мояБаза.ListFields("Люди"); // Обход всех полей, таблицы ЛЮДИ            Счетчик = 0;            while (!myRec.EOF)            {                if (Счетчик == 0)                    ДобавитьСтроку(myRec.Fields[0].Name + ", " + myRec.Fields[1].Name + ", " + myRec.Fields[2].Name + ", " + myRec.Fields[3].Name + ", " + myRec.Fields[4].Name + ", " + myRec.Fields[5].Name);                ДобавитьСтроку(myRec.Fields[0].Value.ToString + ", " + myRec.Fields[1].Value.ToString + ", " + myRec.Fields[2].Value.ToString + ", " + myRec.Fields[3].Value.ToString + ", " + myRec.Fields[4].Value.ToString + ", " + myRec.Fields[5].Value.ToString);                myRec.MoveNext;                Счетчик++;            }        }        private void ДобавитьСтроку(string p)        {            TreeNode tN = new TreeNode(p);            treeView1.Nodes.Add(tN);        }    } }
#13 by Gepard
прикольно.. Спасибо... А где можно посмотреть параметры процедуры CreateTableDef ? а то в шарпе там куча параметров...
#14 by jbond
- Access Help Ausdruck.CreateTableDef(Name, Attributes, SourceTableName, Connect) Name Ein Variant-Wert (Untertyp String), der das neue TableDef-Objekt eindeutig benennt. Weitere Informationen zu g?ltigen TableDef-Namen finden Sie in dem Thema zur Name-Eigenschaft. Attributes Ein Variant-Wert (Untertyp String), der Informationen ?ber die Quelle einer ge?ffneten Datenbank enth?lt, eine in einer Pass-Through-Abfrage (Pass-Through-Abfrage: Eine SQL-Abfrage zum Senden von Befehlen direkt an einen ODBC-Datenbankserver. Mithilfe von Pass-Through-Abfragen arbeiten Sie direkt mit den Tabellen auf dem Server, anstatt die Daten durch das Microsoft Jet-Datenbankmodul zu verarbeiten.) verwendete Datenbank oder eine verkn?pfte Tabelle (Verkn?pfte Tabelle: Eine Tabelle, die in einer Datei au?erhalb der ge?ffneten Datenbank gespeichert ist, auf deren Datens?tze Access jedoch zugreifen kann. Sie k?nnen Datens?tze in einer verkn?pften Tabelle hinzuf?gen, l?schen und bearbeiten, jedoch nicht die Tabellenstruktur ?ndern.). Weitere Informationen ?ber g?ltige Verbindungszeichenfolgen (Verbindungszeichenfolge: Ein Zeichenfolgenausdruck, mit dem eine externe Datenbank ge?ffnet werden kann.) finden Sie im Thema zur Connect-Eigenschaft.
#15 by ЫЫЫЫ
Для .Net лучше юзать System.Data.OleDb - для сабжа там всё есть. Примерчик:
#17 by Gepard
мне надо при запуске приложения проверять структуру БД, и исправлять, если она не соответствует нужной.
#18 by ЫЫЫЫ
Jet SQL поддерживает DDL: CREATE TABLE ALTER TABLE DELETE TABLE ...
#19 by ЫЫЫЫ
+18 Наврал, не DELETE TABLE, а DROP TABLE...
#20 by Gepard
а обход существующих таблиц?
#21 by Gepard
создание таблицы DAO.TableDef мояТаблица = мояБаза.CreateTableDef("Люди", 32, "", "");            мояТаблица.Fields.Append(мояТаблица.CreateField("Идентификатор", DAO.FieldAttributeEnum.dbVariableField, 37));            мояТаблица.Fields.Append(мояТаблица.CreateField("Наименование", DAO.FieldAttributeEnum.dbVariableField, 200));            мояБаза.TableDefs.Append(мояТаблица); Как сюда теперь добавить в существующую таблицу?
#22 by ЫЫЫЫ
А ты думаешь в ссылка для тупых одинэсников положена? Типа, крутым дотнетчикам западло на microsoft.com зайти?
#23 by Gepard
Как сюда теперь добавить в существующую таблицу? = Как добавить поле в существующую таблицу?
#24 by Gepard
не обижайся... просто метод и интересней
#25 by Gepard
ужас... везде VB... :)
#26 by Gepard
(24, 22) + правда Microsoft рекомендует использовать ADO вместо DAO, таким образом все-таки будем работать через ADO
#27 by Gepard
Просьба закрыть ветку. И, если не трудно, переименовать ветку - в конце добавить в скобках (DAO).
#28 by jbond
- ADOX рекомендуется юзать из программ, поддерживающих только COM. В .Нет это можно сделать ср-вами Адо.Нет провайдера.
#29 by Gepard
я не очень хорошо читаю по-английски, но
#30 by Gepard
а через Odbc или OleDb - можно сделать?
#32 by Gepard
Огромное спасибо!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С