SQL Запрос на создание Базы Данных

 
0
 
Delphi, Kylix & Pascal
ava
antibiotik28 | 02.12.2016, 09:40
Привет всем !
Помогите с вопросом ! Как я могу создать базу через запрос SQL в компоненте Query !
Create DATABASE не работает до тех пор пока я на самом SQL сервере не создам оболочку этой базы, пустую базу ! Ведь при подключении Query требуется указать саму базу ! А если таковой пока нету ?
Приходится сначала на сервере SQL создать пустую БД, потом подключить к этой базе Query и только потом делать CREATE TABLE !
Как мне решить этот вопросс ?
Спасибо !!!

Kommentare (9)
ava
Garmahis | 02.12.2016, 13:05 #
Google подсказывает :)

procedure CreateSQLBase;
var myADO : TADOQuery;
NameSQLBase,NameSQLTable,NameSQLServer : string;

begin
myADO:=TADOQuery.Create(self);
myADO.ConnectionString:='Provider=SQLOLEDB.1;'+
'Integrated Security=SSPI;'+
'Persist Security Info=False;'+
'Data Source='+NameSQLServer;
myADO.SQL.Clear;
myADO.SQL.Text:='CREATE DATABASE '+NameSQLBase;
try
myADO.ExecSQL;
except
ShowMessage('База данных с именем: "'+NameSQLBase+'" - уже существует...');
end;
myADO.Free;
end;
ava
antibiotik28 | 02.12.2016, 13:24 #
MS SQL Server 2005 версия Express
Пользователь имеет полные права !
Server Roles =sysadmin
Спасибо тебе за подсказки !
ava
Garmahis | 02.12.2016, 15:14 #
В MS SQL Server Management Studio подключись под этим пользователем к базе и попробуй выполнить CREATE DATABASE TestDB если база создастся переходи к дельфе. Если от туда по прежнему не создается используй профайлер. Для просмотра выполнения запроса. 
ava
antibiotik28 | 03.12.2016, 17:09 #
Привет!
Спасибо за наставление!
Использовал твой код,  переделал немного переменные.
Стал вопрос  о поиске работающего sql сервера в локальной сети,
на котором есть определённая база, (имеется 100% правильное имя базы) при этом имеются используемые этими серверами порты например 1111или 2222.
Выполнить подключение к серверу и этой базе.
Полазив по форумах понял что есть в делфи компонент indy но работает медленно,  хотя лок сети предполагают быть небольшими до 25 ip.  Как можно реализовать, какие компоненты ползать?
ava
antibiotik28 | 03.12.2016, 17:50 #
Озадачился перед новым годом блин!
На представительствах,  которых около 100 на сервере с базами надо заделать бкап бази,  потом создать пустую и туда развернуть этот бкап и дать имя с использованием 2016 это будет полная база за 2016год. А в той базе из которой снимали образ, почистить некоторые таблицы. Это будет рабочая база за 2017год.
Потом на всех киентских компах в dbe administrator настроить подключения к этим двум базам,  на других клиентских програмах тоже настроить Алисы на эти базы. Это все надо заделать после окончания последнего рабочего дня 2016 года. По рдп вручную я буду парится очень и очень долго.

ava
Garmahis | 05.12.2016, 11:41 #
Я не совсем понимаю зачем делать программу на дельфе. Вам все равно придется вашу программу транслировать на все 100 филиалов и запускать там. Тем более что при таком количестве серверов ни один скрипт не выдержет испытание реальностью и то что работает на 99 базах из-за разных причин загнется на 100. Я рекомендую написать скрипт и просто его запускать на всех серверах. Сервер у вас 2005. Значит нужна следующая последовательность:
1. Бекапим старую базу
    https://msdn.microsoft.com/ru-ru/library/ms...(v=sql.90).aspx
2. Создаем новую CREATE DATABASE Work2017
3. Ресторим
    https://msdn.microsoft.com/ru-ru/library/ms...(v=sql.90).aspx
4. Удаляяем из стаблиц старые данные. Тут я думаю вопросов нет.
5. Теперь прибиваем лишнее в логах что бы база не занимала дофига
DBCC SHRINKFILE( ИмяФайлаЛога,  ЖелаемыйРазмер )
ava
antibiotik28 | 05.12.2016, 13:31 #
Просто прогу разослал всем  и сказал запустите вот этот файл ! На любом компе из сети в которой и вертится SQL база ! И все !
Нажатие одной кнопки "выполнить' сделает весь процесс ! И тем более надо сделать невозможным повторную перезапись образа или востановления ! Чтобы не допустить
случайное переписывание очищеной  базой !  Если кто то надумается повторно запустить прогу !
Скрипт тоже надо транслировать всем ! Да  в скриптах не силен !
Скрипт надо запускать именно на самом  сервере, хотя я не уверен, не просто в сети где стоит сервер. Сервер стоит без клавы и монитора сами юзеры этого не сделают !
А конектится самому на все 100 серверов это муторно !
И почему прога не заработает на всех представительствах ?
Везде стоит
1 SQL Server 2005
2 Порты прописаны 1111 или 2222 других не используем
3 Имя базы используем в обязательном порядке 'express'
Единственный пока вопрос это свободное место на диске С:
И немного затрудняет вопрос по-  невозможности еще раз перебекапить и востановить уже очищеной базы !
ava
Garmahis | 05.12.2016, 14:58 #
Ну смотри Я не знаю насколько жестко идет администрирование в ваших сетях, но по сути программе надо получить список всех ip убедиться что там расшарены порты 1111 или 2222. Скорее всего они открыты на всех машинах. Далее для каждого ip вы пытаетесь подключиться к серверу. Стандартный таймаут запроса 30 секунд. Если возвращает таймаут то переходите к следующему порта или следующего ip. таким образом на проверку каждого ip уходит 1 минута. Так нашли сервер куда подключились. Я даже не рассматриваю ситуацию когда еще на каком-то компе в сети стоит другой sql server. Допустим правильный сервер единственный в вашей сети. Дальше вы проверяете наличие нужно базы данных. А что делать если  на сервере несколько баз с именем 'express'? Вы уверены что на всех 100 серверах это так? Допустим да вы запускаете бекап. Как вы гарантируете что по адресу бекапа будет достаточно места? Опять же замечу что хоть в пишите что не сильны в скриптах но вам точно так же надо писать этот же самый скрипт только вы его будете вызывать из дельфи. Кроме того простите судя по вашим вопросам и в дельфи вы тоже не очень сильны. Боюсь что вы потратете больше времени на написание программы чем на ручное выполнение всего этого.
Дальше вы создаете новую базу. и пытаетесь развернуть бекап. Опять кто гарантирует что места на диске хватит? Так же не известно сколько еще может возникнуть ошибок при удалении данных из таблиц. Какие индексы это затронет и тд.
ava
_zorn_ | 08.12.2016, 22:08 #
Цитата (antibiotik28 @  2.12.2016,  16:40 findReferencedText)
Приходится сначала на сервере SQL создать пустую БД, потом подключить к этой базе Query и только потом делать CREATE TABLE !

Как мне решить этот вопросс ?

Скриптом. Дети винды страдают...
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden