Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 321

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Столкнулся с неожиданной проблемой.

пытаюсь в MSSQL удалить строки:
dirPath, SQLstring : string;
...
ADOQuery1.Close;
SQLstring := 'DELETE FROM '+tableName+' WHERE Path=:Pathh';
ADOQuery1.SQL.Text:=SQLstring;
ADOQuery1.Parameters.ParamByName('Pathh').Value := dirPath;
ADOQuery1.ExecSQL;

выдает ошибку на последней строке. Пробовал типы полей text, ntext. C nvarcar(50) работает, но 50 мне мало, т.к. в ячейке хранится путь к файлу.

описание ошибки:
---------------------------
Debugger Exception Notification
---------------------------
Project LoadMediaProject.exe raised exception class EOleException with message 'The data types text and text are incompatible in the equal to operator'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

AlexMPEI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: AlexMPEI (статус: 1-ый класс)
Вопрос отправлен: 23 октября 2009, 09:53
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 23 октября 2009, 16:52; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 23 октября 2009, 10:23 [#1]:

А если запрос сформировать ручками? ну где то так
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'DELETE FROM '+tableName+' WHERE Path="'+dirPath+'"';
ADOQuery1.ExecSQL;
Галочка "подтверждения прочтения" - вселенское зло.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 23 октября 2009, 11:23 [#2]:

SQLstring := 'DELETE FROM '+tableName+' WHERE Path="'+dirPath+'"';

в этом случае возникает другая ошибка:

---------------------------
Debugger Exception Notification
---------------------------
Project LoadMediaProject.exe raised exception class EOleException with message 'Invalid column name 'C:\Music\Rock\Ïîëêîâíèê è îäíîïîë÷àíå\Çàòî êàê ïîãóëÿëè\polkovnik_i_odnopolchane-zato_kak_pogulyali_.mp3''. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

как я понимаю, он тут считает переданный параметр именем колонки почему-то
Вадим К

Вадим К (статус: Академик), 23 октября 2009, 11:39 [#3]:

С кавычками ничего не напутали? делаем следующее
- сам запрос без выполнения записываем в Memo и копируем сюда.
- в качестве имени файла ставим к примеру xxx (латинскими буквами заведомо отсутствующее имя) - такой запрос просто обязан пройти (ну при этом он конечно ничего не удалит.
- пробуем запрос записать так
ADOQuery1.SQL.Text := 'DELETE FROM '+tableName+' WHERE Path='+QuoteStr(dirPath);
Галочка "подтверждения прочтения" - вселенское зло.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 23 октября 2009, 12:03 [#4]:

код:

ADOQuery1.Close;
dirPath := 'xxx';
ADOQuery1.SQL.Text := 'DELETE FROM '+tableName+' WHERE Path='+QuotedStr(dirPath);
Memo1.Lines.Add(ADOQueryInsertItem.SQL.Text);
ADOQuery1.ExecSQL;

запись в мемо:
DELETE FROM MusicTable WHERE Path='xxx'

ошибка:

---------------------------
Debugger Exception Notification
---------------------------
Project LoadMediaProject.exe raised exception class EOleException with message 'The data types text and varchar are incompatible in the equal to operator'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Вадим К

Вадим К (статус: Академик), 23 октября 2009, 12:16 [#5]:

у поля Path тим text? если да, то смените на varchar(260) или nvarchar(260)
260 будет достаточно для указания пути (это внутреннее ограничение винды. Длинее путь можно задать, но что бы его использовать, надо применять специальное апи).
Галочка "подтверждения прочтения" - вселенское зло.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 23 октября 2009, 12:27 [#6]:

с nvarchar оно изначально работало :) я не понимаю почему не хочет с ntext, text - это же тоже строки. На самом деле я просто не знал что в nvarchar можно задать размер - в списке было только 10 и 50. Оказывается, он просто ручками пишется, так что все ок.
Спасибо.
Вадим К

Вадим К (статус: Академик), 23 октября 2009, 12:29 [#7]:

это официальный глюк майкрософта - для поля типа text не работает сравнение в where для access и mssql.
Галочка "подтверждения прочтения" - вселенское зло.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 23 октября 2009, 16:52 [#8]:

Цитата (Вадим К):

это официальный глюк

Хорошо сказано :-)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.02 сек.