Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.36.10] |
|
Сообщ.
#1
,
|
|
|
Работаю через ADO с Microsoft SQL server -ом.
Всё конектится, отображается, меняется и вообще все запросы работают путём. Но всё это происходит с теми базами данных, что уже ручками подключены к SQL-server-у. Теперь встаёт задача - подключить программно ещё одну базу данных (то есть - пару *.ldf и *.mdf файлов). Лезу в Help по SQL-server-у - вижу там команду (пример ниже) EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' А теперь может кто-нибудь просветить идиотика, как мне эту самую команду подать SQL-серверу подать, каким кодом? И через какой компонент? через TADOConnection или TADOStoredProc ? Если у кого есть подобный примерчик - буду премного благодарен. P.S. В принципе - работаю на BCB6, но и код Delphi думаю расшифрую без труда... |
Сообщ.
#2
,
|
|
|
Драйвер ODBC для SQL Server Стандартная политика безопасности: oConn.Open "Driver={SQL Server};" & _ "Server=carl2;" & _ "Database=pubs;" & _ "Uid=sa;" & _ "Pwd=;" Trusted Connection: oConn.Open "Driver={SQL Server};" & _ "Server=carl2;" & _ "Database=pubs;" & _ "Uid=;" & _ "Pwd=;" Примечание: используйте пустой UID и PWD С запросом имени пользователя и пароля oConn.Properties("Prompt") = adPromptAlways oConn.Open "Driver={SQL Server};" & _ "Server=carl2;" & _ "DataBase=pubs;" |
Сообщ.
#3
,
|
|
|
Мало что понял, простите идиотика.
Кто такой oConn? Database=pubs - насколько понимаю имя базы данных (по видимому pubs - задаю сам, какое хочу? или нет?). А вот где указать вместе с путём - из каких файлов брать собственно базу данных? |
Сообщ.
#4
,
|
|
|
Цитата Шурик П. @ да какая разница? в обоих случаях команда сработает. главное - иметь соответствуишие права.через TADOConnection или TADOStoredProc ? попробуи, есл что не так, тогда будем разбератся |
Сообщ.
#5
,
|
|
|
Цитата Kobra @ да какая разница? в обоих случаях команда сработает. главное - иметь соответствуишие права. Всё-таки ещё раз - мне надо подключить базу к SQL-серверу. А не подключиться к базе, уже подключённой к SQL-серверу. Я так понимаю, тот кусок справки, что писал Bas - это собственно подключение к уже подключённой к SQL серверу базе данных, аналог вот такого примерно С-шного кода: ADOConnection1->Connected = false ; ADOConnection1->ConnectionString = "Provider=serverType;" "Integrated Security=SSPI;" "Persist Security Info=False;" "Data Source=serverName;" "Initial Catalog=dbName;"; ADOConnection1->Connected = true ; У меня же проблемка вот в чём: 1. Есть запущенный MS SQL server. К нему подключены некие базы данных. К ним я достукиваюсь с помощью конструкции приведённой выше без проблем 2. Теперь - мне надо получить доступ к данным, лежащим в паре файлов, допустим: 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.ldf' при этом про эти файлы пока SQL-server знать не знает и ведать не ведает. 3. Чтобы получить доступ к данным из этих файлов, ИМХО, надо чтобы SQL-server их увидел, подключил и сопоставил этим двум файлам некое имя dbName, которое потом подставляю в ADOConnection1->ConnectionString = "Initial Catalog=dbName;" и получу доступ к данным. 4. Лезу в help по SQL-server - и нахожу там функцию SQL-server-а sp_attach_db которая идеально решила бы мою проблему (пример ниже) EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.ldf' 5. А теперь - главная проблема. Я не знаю, как, пользуя TADOConnection или TADOStoredProc подать серверу эту самую команду. 6. Порывшись в help - нашёл коллекцию Commands у TADOConnection. Недолго думая сляпал вот такой С-шный код: AnsiString dr = "c:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data" AnsiString mdf = dr + "\\" + dbName + ".mdf"; AnsiString ldf = dr + "\\" + dbName + ".ldf"; ADOConnection1->Commands[0]->CommandText = "EXEC sp_attach_db @dbname=N'" + dbName + "', @filename1=N'" + mdf + "', @filename2=N'" + ldf + "'"; ADOConnection1->Commands[0]->Execute(); и само собой налетаю при выполнении на сообщение о том, что нету у меня Commands[0] . Что резонно, вот только найти - как добавить в коллекцию команду. Ибо ничего похожего на метод Add я у TADOCommands найти не смог |
Сообщ.
#6
,
|
|
|
TADOCommands имеет своиство Text. но так как я им не пользуюс, дам пример с TADOStoredProc, только на делфи.
procedure TForm1.TntButton1Click(Sender: TObject); var SP: TADOStoredProc; begin SP := TADOStoredProc.Create(nil); SP.Parameters.Clear; SP.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=MERABK\M0'; SP.ProcedureName := 'sp_attach_db'; SP.Parameters.CreateParameter('@dbname', ftWideString, pdInput, 255, 'test'); SP.Parameters.CreateParameter('@filename1', ftWideString, pdInput, 255, 'C:\Program Files\Microsoft SQL Server\MSSQL$M0\Data\test_Data.mdf'); SP.Parameters.CreateParameter('@filename2', ftWideString, pdInput, 255, 'C:\Program Files\Microsoft SQL Server\MSSQL$M0\Data\test_Log.ldf'); SP.ExecProc; FreeAndNil(SP); end; |
Сообщ.
#7
,
|
|
|
Ну вот. После долгих мучений родил таки код:
// Подключаем новую базу данных ADOConnection1->Connected = false; TADOStoredProc *SP = new TADOStoredProc(NULL); SP->ConnectionString = ADOConnection1->ConnectionString; SP->ProcedureName = "sp_attach_db"; SP->Parameters->CreateParameter("@dbname=" , ftWideString, pdInput, 255, dName); SP->Parameters->CreateParameter("@filename1=", ftWideString, pdInput, 255, mdf ); SP->Parameters->CreateParameter("@filename2=", ftWideString, pdInput, 255, ldf ); SP->ExecProc(); ADOConnection1->Connected = true ; delete SP; Вроде бы подключить новую DataBase получилось. Во всяком случае, при попытке подключить базу два раза подряд Сервер вернул сообщение что такая база данных уже существует. Хотя данных пока считать не удалось ... разбираюсь дальше Всё одно - спасибо |
Сообщ.
#8
,
|
|
|
Чтобы подключить базу, сначала надо подключится к серверу и базе Master
Ну а дальше ты уже знаешь. |
Сообщ.
#9
,
|
|
|
Цитата Шурик П. @ Работаю через ADO с Microsoft SQL server -ом. Всё конектится, отображается, меняется и вообще все запросы работают путём. может осталась программка? уже недели три бьюсь и всё не могу никак извлечь данные из базы. поделитесь, пожалуйста. или объясните что и как надо правильно делать |