Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Как программно "связать" таблици в Access - е   Найти похожие ветки 

 
Sectey ©   (2004-05-07 09:36) [0]

Добрый день. Я имею акцесовскую базу данных со связанными таблицами. Как можно из Delphi изменить связь этих таблиц?


 
Erik ©   (2004-05-07 09:52) [1]

Пиши нужный тебе SQL и невспоминай о ерунде. Связь в базе делается для создания констреинтов и индексов. Если конкчно ты не пишеш второй Access. :)


 
sniknik ©   (2004-05-07 10:59) [2]

изменить, сначала удаляеш индекс после создаеш, поиши в справке foreign key это как раз связь. (мог бы и сюда скопировать но больно там много, справки то)


 
Sectey ©   (2004-05-07 11:49) [3]

Erik © >
Это как в SQL запросе прилинковать таблицу из другой базы данных?


 
Sectey ©   (2004-05-07 11:56) [4]

sniknik ©>
У меня есть БД DB1 с таблицей Table1.
У меня есть БД DB2 с таблицей Table2 и Table1(связанная из DB1.Table1). Так вот мне необходими эту таблицу подключить программно из Delphi


 
Erik ©   (2004-05-07 12:25) [5]

Так бы и писал, а то непонятно вопрос сформулировен(телепаты в отпуске).
Вот SQL для получения списка прилинкованых таблиц:
Connect

SELECT Trim([MSysObjects].[Database]) AS [Database], MSysObjects.ForeignName AS FirstName, MSysObjects.Name AS LastName, IIf(InStr(1,[ForeignName],"#")=0,"",[ForeignName]) AS DBF
FROM MSysObjects
WHERE (((MSysObjects.Type)=6))
ORDER BY Trim([MSysObjects].[Database]) DESC;

Это по групам разделить(несколько таблиц из одной базы): ConnectGroup

SELECT Connect.Database, First(Connect.FirstName) AS FirstName, First(Connect.LastName) AS LastName, Count(Connect.FirstName) AS End
FROM Connect
GROUP BY Connect.Database, Connect.DBF
ORDER BY Count(Connect.FirstName) DESC;

Далее на VBA код(под MsAccess писал):
// FileTable![LastName] - это string имя таблицы
 ReturnValue = SysCmd(SYSCMD_INITMETER, "Connect table:", GroupTable![end])
 Set MyDB = CurrentDb()
 FileTable.FindFirst FindWhere
 On Error GoTo ShowErr
 Do Until FileTable.NoMatch "Ïîäêëþ÷èòü òàáëèöû.
   Set MyTable = MyDB.TableDefs(FileTable![LastName])
   If Mid$(MyTable.Connect, 1, 1) = ";" Then
     MyTable.Connect = ";DATABASE=" & DataBaseName
   Else
     FileName = FileTable![FirstName]
     Call CheckExternalFile(DataBaseName, FileName)
     Call FindDataBase(FileName, True, Reopen)
     MyTable.Connect = RemovRight(MyTable.Connect, ";") & ";DATABASE=" & RemovRight(FileName, "\")
   End If
   MyTable.RefreshLink
   FileTable.FindNext FindWhere
   TableCount = TableCount + 1
   ReturnValue = SysCmd(SYSCMD_UPDATEMETER, TableCount)
 Loop
 CheckBase = True
ExitCheckBase:
 ReturnValue = SysCmd(SYSCMD_REMOVEMETER)
 Exit Function

ShowErr:
 Const NONEXISTENT_TABLE = 3011
 Const NWIND_NOT_FOUND = 3024
 Const ACCESS_DENIED = 3051
 Const READ_ONLY_DATABASE = 3027
 Const NotFoundObject = 3265
 Const NotFoundIndex = 3256

Главное это RefreshLink!


 
sniknik ©   (2004-05-07 12:36) [6]

можно просто обращатся к таблице dbf из коннекта к mdb
SELECT * FROM DbfTable IN "D:\" "dBase IV;"


 
Sectey ©   (2004-05-07 13:39) [7]

>Erik ©

 Set MyTable = MyDB.TableDefs( ... )
 MyTable.Connect = ...

Как мне это в Delphi реализовать?



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
3-1083920275
Jungle
2004-05-07 12:57
2004.05.30
Вопрос по MS SQL


3-1083898736
Maxim2030
2004-05-07 06:58
2004.05.30
обновление DataSet а не работает...


14-1084414890
Думкин
2004-05-13 06:21
2004.05.30
С днем рождения! 13 мая


11-1073581090
Rasperepodviipodvert
2004-01-08 19:58
2004.05.30
Kol


3-1084335048
Inc.
2004-05-12 08:10
2004.05.30
Фильтрация по двум полям.