|
Вопрос # 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 (статус: 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 (статус: 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 (статус: 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 (статус: 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]:
Цитата (Вадим К):
это официальный глюк
Хорошо сказано
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|