![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Список таблиц базы данных.... [D7, MSSQL]
RustiK © (2004-02-10 13:58:00)
Привет, всем!!!
У меня вопрос какой SQL командой можно получить спиок всех таблиц в базе данных...
Заранее спасибо!!!
RustiK (2004-02-11 14:48:00) [1]
> про Jet OLEDB:System database=system.mdb
вообще такого файла не существует. Хотя есть запись в реестре именно на него. Есть system.mdw...
Пробовал подключать результат тот же "Отказ в доступе на чтение записи(ей) для объекта MSysObjects".
RustiK (2004-02-11 14:45:00) [2]
Listbox1 компонент на клиенте.
а вот ошибка: "Type not allowed in Variant Disphatch call".
А может я вам свои исходники по почте пришлю?
sniknik (2004-02-11 14:39:00) [3]
> Решил на Admin пароль поставить. Поставил. Теперь при открытии базы в аксессе требует пароль
раз отлично от по умолчанию то см. > sniknik © (11.02.04 13:15) [19]
про Jet OLEDB:System database=system.mdb
> тут я коечто другое накодил но почему-то ошибка вылазиет может объясните?
> DCOMConnection1.AppServer.AdoConnection1.GetTableNames(ListBox1.Items, false);
;о) вряд ли работать будет, ListBox1.Items это чей компонент? клиента. а у клиента и сервера не общее пространство, сервер про него и не знает (про компонет).
а какую ошибку хоть выдает? мне такое в голову не приходило, да и счас лень тест делать.
RustiK (2004-02-11 14:18:00) [4]
> начала проверить без трехзвенки прямым коннектом
Проверил и вот такая странность получается. Все открывает без проблем. Решил на Admin пароль поставить. Поставил.
Теперь при открытии базы в аксессе требует пароль, а Дельфи можно без пароля , а с паролем не пускает... Теперь даже не знаю как это понимать.
>>>>
тут я коечто другое накодил но почему-то ошибка вылазиет может объясните?
DCOMConnection1.AppServer.AdoConnection1.GetTableNames(ListBox1.Items, false);
sniknik (2004-02-11 14:07:00) [5]
вот этот метод описанный в датамодуле на сервере
function TWCMetods.GetUpdeteNum(CashNo: Integer): Integer;
var StrFlag: string;
begin
result:= 0;
try
if (CashNo > 0) and (CashNo < 51) then begin
StrFlag:= StringOfChar("_", CashNo-1)+"1%";
ADOLocDSet.Close;
ADOLocDSet.CommandText:=
"SELECT Min(INCREM) AS INCREM FROM FlagOut WHERE CASH LIKE """+StrFlag+""" AND Flag IN (1,2)";
ADOLocDSet.Open;
if not ADOLocDSet.IsEmpty then
result:= ADOLocDSet.Fields[0].AsInteger;
ADOLocDSet.Close;
end;
except
end;
end;
sniknik (2004-02-11 14:01:00) [6]
> Поставить то поставил галочки, но все равно не работает... :-((
> Уж даже не знаю что делать. Может я совсем тупой, но у меня ничего не получается...
для начала проверить без трехзвенки прямым коннектом.
можно просто в дельфях или готовой прогой
для проверок запросов могу выслать программу которой сам пользуюсь.
> Можно по подробней а то у меня компилир ошибшку на GetUpdeteNum дает
естественно это мойметод, опиши себе свой на сервере и вызывай с клиента, а уж что он там передавать будет в принципе неважно, это просто пример, доступ к методам сервера через DCOMConnection.AppServer.
RustiK (2004-02-11 13:52:00) [7]
> достаточно галочки поставить на нужное у нужной таблицы.
Поставить то поставил галочки, но все равно не работает... :-((
Уж даже не знаю что делать. Может я совсем тупой, но у меня ничего не получается...
> procedure TRunUpdate.GetIncrem;
> begin
> ValIncrem:= AppServer.GetUpdeteNum(RecPam.CashNum);
> end;
Можно по подробней а то у меня компилир ошибшку на GetUpdeteNum дает
sniknik (2004-02-11 13:18:00) [8]
> зайди в лткрой
читать
зайди и открой
sniknik (2004-02-11 13:15:00) [9]
а трехзвенка,
можно метод сделать на сервере а с клиента его юзать
вроде этого
procedure TRunUpdate.GetIncrem;
begin
ValIncrem:= AppServer.GetUpdeteNum(RecPam.CashNum);
end;
AppServer это такая полезная штука, есть и в DCOMConnection и в SocketConnection;
как лутше передавать (разделенное запятыми там или по другому) можно придумать (в этом случае что передается из названий догадатся можно)
насчет запроса,
дать разрешения на таблицы - зайди в лткрой базу аксесс->сервис->защита->разрешения дальше разберешся, достаточно галочки поставить на нужное у нужной таблицы.
или для юзера
в реестре ветка
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines параметр SystemDB
там база используемая по умолчанию аксесом, найди ее и тоже подключай (брать имя из реестра нужно т.к. название может быть разным)
параметр в строке подключения
Jet OLEDB:System database=system.mdb
только с путем тем который найдеш (тоже в разных местах может лежать)
вроде все.
RustiK (2004-02-11 12:59:00) [10]Кстати забыл сказать что исходники программы написаны по статье ADO & COM или SQL-сервер своими руками, но немного изменены.
RustiK (2004-02-11 12:55:00) [11]
Начнем с начала. Про MSSQL можешь забыть все что мне нужно было я уже выяснил.
У меня клиент серверное приложение.
На сервер есть ADOConnection, RemoteDtaModule, а в нем DatasetProvider и ADODataset. Все это между собой связывается.
На клиенте есть DCOMConnection, SocketConnection, ClientDataSet и DataSource1. Это все также между собой все связывается.
Я запускаю сервер на одной машине и подключаю через Jet OLE DB Provider базу MS ACCESS. Сажусь за другую и по сети зпускаю клиент и подсоединяюсь к серверу. Посылаю любой SQL запрос и он у меня проходит, то есть работает все нормально.
Но, есть одно ноникак не могу получить список таблиц ни SQL запросом ни каким-либо други способ.
Уффф. Аж запыхался...
Надеюсть теперь недопониманий не будет
sniknik (2004-02-11 12:29:00) [12]
тут ктото когото не понимает. возможно я.
т.е. у тебя конект к MSSQL а получить надо в этом коннекте список таблиц из аксесс базы? или чегото подобное? обьясни на пальцах.
или всетаки конект к той базе из которой список таблиц нужен? тогла GetTableNames подойдет(должен) независимо от серверного/клиентского приложения. (во всяком случае я ограничивающего фактора придумать не могу)
RustiK (2004-02-11 12:02:00) [13]
> про GetTableNames не думал? чем не подходит?
дЕЛО в том что я подключаю базу на сервер приложении.
А получить мне надо список таблиц и клиентского приложения которое подключается к сервер приложению.
Плохиш (2004-02-11 10:51:00) [14]
>sniknik © (11.02.04 10:46) [13]
> про GetTableNames не думал? чем не подходит?
Это не их метод ;-)
sniknik (2004-02-11 10:46:00) [15]
подключайся на Admin, и тогда системным таблицам дай разрешение открытия Admin-ом (в аксессе к примеру).
с другим(заданным) юзером нужно использовать системную базу с юзерами/групамми, понимаю если бы безопаснось требовала, а только ради получения списка таблиц... накладно.
про GetTableNames не думал? чем не подходит?
RustiK (2004-02-11 09:26:00) [16]
Добавил Я юзера Admin1 дал ему пароль и абсолютно все права
а при создании Connection на Test connection говорит, что Faild
Что делать?
RustiK (2004-02-11 09:22:00) [17]
А как это сделать если не секрет?
sniknik (2004-02-11 08:26:00) [18]
GetTableNames универсально, подумай еще что лутше.
SELECT Name FROM MSysObjects WHERE Type=1 AND Flags=0
доступ к MSysObjects ограничен, нужно или таблице права дать или юзера использовать у кого разрешения есть на открытие.
RustiK (2004-02-11 08:02:00) [19]
Я извиняюсь за настойчивость но не как дотумкаться не могу...
Как получить список таблиц sql запросом если используется база Microsoft Access?
RustiK (2004-02-11 07:59:00) [20]
Огромное спасибо