Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2009, 14:44   #1
vbilez
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 13
Лампочка баги в MS SQL Server 2000

при создании базы из програмы, создание ее происходит не сразу, а со второго раза. при попытки создать базу с первого раза выдаються следующие ошибки:

project opc2sql raised exception class EOleException with message 'Invalid object name opc_sig''
Process stoped
Use step or run to continue

в другой програме, которая как раз отвечает за записть в базу, выдается следующая ошибка
"Операция не допускается, если объект закрыт"
vbilez вне форума Ответить с цитированием
Старый 04.02.2009, 16:04   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
баги в MS SQL Server 2000
Сервер то тут при чем?
Баги в вашей программе. Помогает знаменитая утилита "vipryamitelruk.exe"
'Invalid object name opc_sig' - прямое указание на неверно указанное имя поля (точнее сказать трудно - мало инфы). А-а-а, это таблица?
"Операция не допускается, если объект закрыт" - и что тут удивительного? Вы не произвели подключение к серверу, но пытаетесь обратиться к какой-то таблице... То же самое, что в Москве спрашивать, как пройти к Исакию...

Последний раз редактировалось mihali4; 05.02.2009 в 12:53.
mihali4 вне форума Ответить с цитированием
Старый 05.02.2009, 12:30   #3
vbilez
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 13
Смех

код не мой. пытаюсь разобратся в чужих исходах
если не получится придется писать самому, скорее всего С++
но повторюсь, каким то образом соединение с базой происходит со второго запуска проги


так подключаюсь к базе
Код:
s:='CREATE DATABASE ['+name+']  ON (NAME = N'''+name+'_Data'', FILENAME = N''D:\1\SQL\'+name+'_Data.MDF'' , SIZE = 19, FILEGROWTH = 10%) LOG ON (NAME = N'''+name+
'_Log'', FILENAME = N''D:\1\SQL\'+name+'_Log.LDF'' , SIZE = 1, FILEGROWTH = 10%) COLLATE Cyrillic_General_CI_AS';
ADOConnection1.Execute(s);
s:='use ['+name+']';
ADOConnection1.Execute(s);
s:='CREATE TABLE [dbo].[opc_sig]([sig_id] [int] IDENTITY (0, 1) NOT NULL, [sig_name] [varchar](50) COLLATE Cyrillic_General_CI_AS NULL, [sig_type] [smallint] NULL) ON [PRIMARY] ';
ADOConnection1.Execute(s);
s:='CREATE TABLE [dbo].[opc_sz]([sz_sig_id] [smallint] NOT NULL, [sz_datetime] [datetime] NULL, [sz_data] [real] NULL, [sz_id] [int] IDENTITY (0, 1) NOT NULL) ON [PRIMARY] ';
ADOConnection1.Execute(s);
s:='CREATE TABLE [dbo].[opc_tmp]([id] [smallint] NULL, [dt] [datetime] NULL, [da] [real] NULL) ON [PRIMARY] ';
ADOConnection1.Execute(s);
s:='ALTER TABLE [dbo].[opc_sig] WITH NOCHECK ADD CONSTRAINT [DF_opc_sig_sig_type] DEFAULT  (0) FOR [sig_type], CONSTRAINT [PK_opc_sig] PRIMARY KEY CLUSTERED ([sig_id]) ON [PRIMARY] ';
ADOConnection1.Execute(s);
s:='SET              QUOTED_IDENTIFIER OFF ';
ADOConnection1.Execute(s);
s:='SET              ANSI_NULLS OFF ';
ADOConnection1.Execute(s);
s:=Memo2.Text;
ADOConnection1.Execute(s);
s:='SET              QUOTED_IDENTIFIER OFF';
ADOConnection1.Execute(s);
s:='SET              ANSI_NULLS ON';
ADOConnection1.Execute(s);
Код:
function TForm1.Convert;
        var s:string;
            n:integer;
            r:_Recordset;
begin
ADOConnection1.Connected:=true;
        s:=ExtractFileName(MySigName);
        r:=ADOConnection1.Execute('select count(*) from opc_sig where sig_name='''+s+'''');
{тут произошла ошибка}        n:=integer(r.Fields[0].Value);
        r.Close;
строка подключения
Код:

'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='+name+';Data Source=127.0.0.1';

Последний раз редактировалось vbilez; 05.02.2009 в 12:42.
vbilez вне форума Ответить с цитированием
Старый 05.02.2009, 12:40   #4
vbilez
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 13
По умолчанию

насчет таблицы opc_sig ее и не может быть, ибо база не создана
насчет багов возможны вы правы, дело в програме

Последний раз редактировалось vbilez; 05.02.2009 в 12:43.
vbilez вне форума Ответить с цитированием
Старый 05.02.2009, 16:39   #5
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
Сообщение

А вот интерессно код который приведён ниже, каждый раз выполняется когда запускается программа?
Цитата:
Так подключаюсь к базе
Код:
s:='CREATE DATABASE ['+name+'] ON (NAME = N'''+name+'_Data'', FILENAME = N''D:\1\SQL\'+name+'_Data.MDF'' , SIZE = 19, FILEGROWTH = 10%) LOG ON (NAME = N'''+name+
'_Log'', FILENAME = N''D:\1\SQL\'+name+'_Log.LDF'' , SIZE = 1, FILEGROWTH = 10%) COLLATE Cyrillic_General_CI_AS';
ADOConnection1.Execute(s);
s:='use ['+name+']';
ADOConnection1.Execute(s);
s:='CREATE TABLE [dbo].[opc_sig]([sig_id] [int] IDENTITY (0, 1) NOT NULL, [sig_name] [varchar](50) COLLATE Cyrillic_General_CI_AS NULL, [sig_type] [smallint] NULL) ON [PRIMARY] ';
ADOConnection1.Execute(s);
s:='CREATE TABLE [dbo].[opc_sz]([sz_sig_id] [smallint] NOT NULL, [sz_datetime] [datetime] NULL, [sz_data] [real] NULL, [sz_id] [int] IDENTITY (0, 1) NOT NULL) ON [PRIMARY] ';
ADOConnection1.Execute(s);
s:='CREATE TABLE [dbo].[opc_tmp]([id] [smallint] NULL, [dt] [datetime] NULL, [da] [real] NULL) ON [PRIMARY] ';
ADOConnection1.Execute(s);
s:='ALTER TABLE [dbo].[opc_sig] WITH NOCHECK ADD CONSTRAINT [DF_opc_sig_sig_type] DEFAULT (0) FOR [sig_type], CONSTRAINT [PK_opc_sig] PRIMARY KEY CLUSTERED ([sig_id]) ON [PRIMARY] ';
ADOConnection1.Execute(s);
s:='SET QUOTED_IDENTIFIER OFF ';
ADOConnection1.Execute(s);
s:='SET ANSI_NULLS OFF ';
ADOConnection1.Execute(s);
s:=Memo2.Text;
ADOConnection1.Execute(s);
s:='SET QUOTED_IDENTIFIER OFF';
ADOConnection1.Execute(s);
s:='SET ANSI_NULLS ON';
ADOConnection1.Execute(s);
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 06.02.2009, 10:06   #6
vbilez
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 13
По умолчанию

вообще-то расщитывалось, что прога постоянно будет висеть запущеной, но каждый месяц должна создаватся новая база
vbilez вне форума Ответить с цитированием
Старый 06.02.2009, 10:08   #7
vbilez
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 13
По умолчанию

код срабатывает когда приходит win-сообщение с другой программы
vbilez вне форума Ответить с цитированием
Старый 06.02.2009, 11:49   #8
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

мож проще не создавать каждый раз новую базу, а сначала проверять наличие базы на сервере:
SELECT
sys.sysdatabases.name
FROM
sys.sysdatabases
where name='<имя базы>'
-----
или
-----
SELECT
HAS_DBACCESS('<имя базы>')
sys.sysdatabases.name
FROM
sys.sysdatabases


, если её нет то создать, ну а если есть - проверить наличие нужной таблицы....
SELECT
sys.sysobjects.name,
sys.sysobjects.xtype
FROM
sys.sysobjects
where xtype='U'
and name='<имя таблицы>'


действия аналогичны как и при проверке на наличие базы, то есть если нет таблицы то создать. ну а потом, когда нужно создавать новую базу, просто очистить ну или удалить таблицы,а не создавать каждый месяц, или когда придёт сообщение, ту же базу и те же таблицы.
Тяжело быть бестолковым.....

Последний раз редактировалось Dark_Spirit; 06.02.2009 в 11:56.
Dark_Spirit вне форума Ответить с цитированием
Старый 03.04.2009, 14:30   #9
vbilez
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 13
По умолчанию

проблема решена
спасибо всем за ответы
проблема была связана с переменной типа recordset
тема закрыта
vbilez вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги по MS SQL Server 2000 Shavminator SQL, базы данных 4 18.10.2008 15:12
кодировка в MS SQL Server 2000 rubi БД в Delphi 1 14.03.2008 12:51
MS sql server 2000 Domovoy SQL, базы данных 1 29.10.2007 10:37
Cоединение Delphi с SQL Server 2000 Girl БД в Delphi 10 20.08.2007 09:00