Форум: "Базы";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];
ВнизПочему в QueryAnalyzer е скрипт работает, а у меня нет? Найти похожие ветки
← →
Kolan © (2007-10-10 09:20) [0]Здравствуйте,
Есть скрип. Если его запустить в QueryAnalyzer (MS SQL Server 2000), то он выполняется нормально.
если так:var
Query: TADOQuery;
begin
Result := —1;
if Assigned(Script) then
begin
Query := TADOQuery.Create(nil);
try
Result := 0;
Query.Connection := FDBConnection;
Query.Prepared := True;
Query.SQL.Text := Script.ScriptText.Text;
Query.ExecSQL;
Result := Query.RowsAffected;
finally
Query.Free;
end;
end;
end;
Тo выдает ошибку:
Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения (EOleException)
Что может быть не так?
← →
ЮЮ © (2007-10-10 09:58) [1]
> Query.Prepared := True;
Это лишнее для запроса вызываемого единожды. Тем более, что текст запроса будет задан только в следующей строке кода
← →
Маша Шрайбер © (2007-10-10 10:10) [2]Сам текст запроса?
← →
Kolan © (2007-10-10 10:21) [3]
--Created by KSQLServerScriptCreator.--
--Creation date and time: „10.10.2007 10:25:17“--
--Used data base: „Stomatology“--
--Used table: „ExpertAppraisalDefect“--
--Script fot table „ExpertAppraisalDefect“ start.--
DECLARE @ExpertAppraisalDefectTempTable TABLE (cddefect1 int, DefectName1 varchar(250), cdgroup1 int, Factor1 float(8));
INSERT INTO @ExpertAppraisalDefectTempTable(cddefect1, DefectName1, cdgroup1, Factor1)
VALUES(1, "Нет описания жалоб", 1, 0.100000001490116);
{…}
INSERT INTO @ExpertAppraisalDefectTempTable(cddefect1, DefectName1, cdgroup1, Factor1)
VALUES(45, "Диагноз поставлен не в соответствии с клинической классификацией", 7, 0.100000001490116);
INSERT INTO @ExpertAppraisalDefectTempTable(cddefect1, DefectName1, cdgroup1, Factor1)
VALUES(46, "При наличии сопутствующего заболеван. не выставлен соответств. диагноз", 7, 0.025000000372529);
INSERT INTO @ExpertAppraisalDefectTempTable(cddefect1, DefectName1, cdgroup1, Factor1)
VALUES(47, "Не применялись современные показанные лечебные технологии ", 4, 0.25);
SET IDENTITY_INSERT ExpertAppraisalDefect ON;
UPDATE ExpertAppraisalDefect
SET DefectName = T.DefectName1, cdgroup = T.cdgroup1, Factor = T.Factor1
FROM @ExpertAppraisalDefectTempTable AS T
WHERE (cddefect = T.cddefect1);
INSERT INTO ExpertAppraisalDefect(cddefect, DefectName, cdgroup, Factor)
SELECT cddefect1, DefectName1, cdgroup1, Factor1 FROM @ExpertAppraisalDefectTempTable AS T
WHERE NOT EXISTS(SELECT * FROM ExpertAppraisalDefect WHERE (cddefect = T.cddefect1))
SET IDENTITY_INSERT ExpertAppraisalDefect OFF;
DBCC CHECKIDENT(ExpertAppraisalDefect, RESEED);
--Script fot table „ExpertAppraisalDefect“ end.--
--Regards to KSoftWare®.--
← →
stone © (2007-10-10 10:25) [4]
> {…}
А это у тебя что такое?
← →
Правильный Вася (2007-10-10 10:35) [5]
> Неправильно определен объект Parameter
Query.ParamCheck:=False;
← →
Kolan © (2007-10-10 10:39) [6]> А это у тебя что такое?
Ну там тоже самое(тот жеINSERT INTO @ExpertAppraisalDefectTempTable
) много раз, только данные другие…
← →
Kolan © (2007-10-10 10:42) [7]
> Query.ParamCheck:=False;
То же самое…
← →
stanislav © (2007-10-10 10:51) [8]--Creation date and time: „10.10.2007 10:25:17“--
здесь : Определяется как параметры
← →
stone © (2007-10-10 10:51) [9]Попробуй заменить TADOQuery на TADODataSet или TADOCommand
← →
stanislav © (2007-10-10 10:53) [10]убери коментарии и все.
← →
Kolan © (2007-10-10 11:00) [11]> убери коментарии и все.
Да, дело в комментариях было.
Еще вопросик остался…
Эта пограмма создаёт скрипты, и хотелось бы тут же их запустить и узнать что все сработало.
Вызываю функцию из [0] так:RowsAffected := GetDataAccessFacade.ExecuteScript(Script);
if RowsAffected = — 1 then
GetScriptResultView.ShowError("Ioeaea")
else
if RowsAffected = 0 then
GetScriptResultView.ShowOk(DefineStringsCount(RowsAffected))
else
GetScriptResultView.ShowInfo(Format("Ничего не изменилось", [RowsAffected]));
Вот на один и тот же скрип Query Analyzer выдает:
(1 row(s) affected)
{…много раз 1 row(s) affected …}
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(44 row(s) affected)
(0 row(s) affected)
Checking identity information: current identity value "47", current column value "47".
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
А моя программаНичего не изменилось
Как бы вывести нечто похожее на то, что показывает Query Analyzer…
← →
Kolan © (2007-10-10 11:02) [12]Блин а как заставить не реагировать на «:»? Время я как выводить буду???
← →
Правильный Вася (2007-10-10 11:10) [13]
> Блин а как заставить не реагировать на «:»?
см. [5]
только вставлять нужно ДО присваивания тескта запроса
> Время я как выводить буду???
выводить куда?
← →
clickmaker © (2007-10-10 11:14) [14]
> [11] Kolan © (10.10.07 11:00)
RowsAffected выдает результат последнего.
А у тебя там 0 row(s) affected)
← →
Kolan © (2007-10-10 11:34) [15]> только вставлять нужно ДО присваивания тескта запроса
Нет это не получится скрипт генерится в одном месте, а че с ни мотом будет еще неиззвестно, а делать генерацию в разных местах — плохо…
> выводить куда?
Сорри, не так выразился не выводить, а вставлять в скрипт…
А нет командыQuery.ОтстаньСоСвоимиПараметрами
?
> RowsAffected выдает результат последнего.
Аааа, вот в чем цимус… Как же получить все сообщения…
← →
ЮЮ © (2007-10-10 11:35) [16]
> if RowsAffected = 0 then
> GetScriptResultView.ShowOk(DefineStringsCount(RowsAffected))
> else
> GetScriptResultView.ShowInfo(Format("Ничего не
> изменилось", [RowsAffected]));
странная логика, 0 выводим, а если RowsAffected > 0, то ничего не изменилось
← →
Правильный Вася (2007-10-10 11:40) [17]
> > только вставлять нужно ДО присваивания тескта запросаНет
> это не получится скрипт генерится в одном месте, а че с
> ни мотом будет еще неиззвестно, а делать генерацию в разных
> местах — плохо…
ты чо, тормоЗ?
вот так надо:Query := TADOQuery.Create(nil);
try
Result := 0;
Query.Connection := FDBConnection;
Query.ParamCheck := False;
Query.SQL.Text := Script.ScriptText.Text;
Query.ExecSQL;
← →
Kolan © (2007-10-10 12:24) [18]> ты чо, тормоЗ?
Учись читать де…ил:
[7] Kolan © (10.10.07 10:42)
> странная логика, 0 выводим, а если RowsAffected > 0, то
> ничего не изменилось
Да с логикой напортачил… Местами поменял:if RowsAffected = — 1 then
GetScriptResultView.ShowError("Ioeaea")
else
if RowsAffected = 0 then
GetScriptResultView.ShowInfo(Format("Ie?aai ia eciaieeinu", [RowsAffected]))
else
GetScriptResultView.ShowOk(DefineStringsCount(RowsAffected));
ПолучилосьОдна строка изменина
, так и есть RowsAffected = 1…
Впринципе пойдет, вопрос закрыт.
← →
Anatoly Podgoretsky © (2007-10-10 12:25) [19]Это последствия CopyPaste
← →
Правильный Вася (2007-10-10 12:30) [20]
> Kolan © (10.10.07 12:24) [18]
тогда мучайся с неуществующими параметрами дальше
← →
Kolan © (2007-10-10 13:13) [21]> тогда мучайся с неуществующими параметрами дальше
Мля так и говори что местами надо поменять, а то когда ругаются есть желание только послать…
Разглядел что в [17] имелось ввиду. Работает. …
← →
Правильный Вася (2007-10-10 13:38) [22]я тебе в [13] так и сказал
только вставлять нужно ДО присваивания тескта запроса
читать нужно внимательнее, а не фыркать
← →
Kolan © (2007-10-10 13:43) [23]> фыркать
б… чеж ты так грубишь…
Фтопку такие советы, даже если они и правильные. :(
← →
Правильный Вася (2007-10-10 16:16) [24]неблагодарный
я запомню
был о тебе лучшего мнения
← →
Kolan © (2007-10-10 16:55) [25]> я запомню
Да я уже тоже запомнил…
> неблагодарный
За что конкретно надо отблагодарить? За «фыркать» или за «тормоЗ»? Вже еще по факсу благодарность послать?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.056 c