Главная страница
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.059 c
3-1084352372
chtr
2004-05-12 12:59
2004.05.30
Как разом вставить все записи из одного TADOQuery в другой


11-1074101780
Phantomaz
2004-01-14 20:36
2004.05.30
Как поместить рисунок из ресурса (иконку) в PopupMenu ?


6-1081457153
Raptoridze
2004-04-09 00:45
2004.05.30
Twebbrowser


9-1075885289
Rudi
2004-02-04 12:01
2004.05.30
Вектор нормали


1-1084361111
новичок_из_сыктывкара
2004-05-12 15:25
2004.05.30
строку наоборот