powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вместо переменных в трассировке ловлю не мои значения
25 сообщений из 25, страница 1 из 1
Вместо переменных в трассировке ловлю не мои значения
    #39501676
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проект написан на Delphi7 . Используются компоненты ADO + MSSQL 2012.
В приложении все работает штатно, и компоненты не оповещают о каких либо ошибках.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
q:=TADOQuery.Create(application);
q.Connection:=pConnection;
q.SQL.Text:='Select dbo.AccountIdOnChipCode('+#39+data+#39+') AccountID';
try
q.Open;
q.Connection:=nil;
if q.RecordCount>0 then
begin
 fAccountId:=q.Fieldbyname('AccountID').AsInteger;
end;
except on e:Exception do
 MessageDlg(e.Message,mtError,[mbok],0);
end;
q.Free;




Однако профайлером отлавливаются ошибки скриптов:

Код: pascal
1.
2.
3.
4.
5.
6.
Select dbo.AccountIdOnChipCode('BASETABLENAME 
Select dbo.AccountIdOnChipCode('id 
Select dbo.AccountIdOnChipCode('KEYCOLUMN 
Select dbo.AccountIdOnChipCode('OPTIMIZE 
Select dbo.AccountIdOnChipCode('myDBname
Select dbo.AccountIdOnChipCode('UTF-8 




При том всем, что в той же сессии, профайлером отваливаются эти же процедуры, но с правильной переменной

Код: sql
1.
select AccountIdOnChipCode('0000ABCDEF') as AccountID



Примечательно еще то, что данному явлению подвержены еще несколько процедур и функций.
Закономерность в том, что замененный параметр, это всегда чип-код карты, считанный картридером.
А так же замечено, что подставляется что-то нечто слово целиком. Т.е. слово до пробела. И эти же слова тоже агрегируемы как в примере. Их не так много вариантов, часто повторяются.

Может кто сталкивался, что это за ерунда?
Приложение работает нормально, но есть опасения, что я чего-то не вижу и где-то может быть не нормально.
Спасибо
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501702
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему не используются параметры?
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501704
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПочему не используются параметры?
Извиняюсь, какие?
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501708
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

Что-то типа (псевдокод):
Код: pascal
1.
2.
q.SQL.Text:='Select dbo.AccountIdOnChipCode(:code) AccountID';
q.Params['CODE'].AsString := data;
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501719
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Встречаются и такие фрагменты кода.
Мне проект достался по наследству, потому как есть
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501741
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

что за "профайлер" такой в delphi 7, о каких скриптах идет речь, что от чего "отваливается" и, наконец - какой текст ошибок?
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501748
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДДвоичник,

что за "профайлер" такой в delphi 7, о каких скриптах идет речь, что от чего "отваливается" и, наконец - какой текст ошибок?

SQL Server Profiler
Скрипты указаны выше, в первом посте
Код: pascal
1.
select dbo.AccountIdOnChipCode('BASETABLENAME


А ошибку выдает SQL Server:
Код: plaintext
1.
Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark after the character string 'BASETABLENAME

Код Delphi, который должен исполняться, так же прописан в первом посте.

не отваливается, извините, опечатался. имелось в виду слово - отлавливается
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501758
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

ну и причем тут Delphi и где собственно вопрос?

Или ты не в силах перевести на русский

Unclosed quotation mark after the character string 'BASETABLENAME?

И не видишь разницы между тем, что должно получиться тут:
Код: pascal
1.
q.SQL.Text:='Select dbo.AccountIdOnChipCode('+#39+data+#39+') AccountID';


и этим:
Код: sql
1.
Select dbo.AccountIdOnChipCode('BASETABLENAME


?
...
Куда вы дели программиста?!
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501786
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'Select dbo.AccountIdOnChipCode('''+data+''') AccountID'

?
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501791
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi'Select dbo.AccountIdOnChipCode('''+data+''') AccountID'
?
А чем это отличается от q.SQL.Text:='Select dbo.AccountIdOnChipCode('+#39+data+#39+') AccountID';, кроме формы записи?
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39501799
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очевидно, что только религиозными убеждениями.

Я переделал в параметризованный код. Буду еще наблюдать
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502574
Uridian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Двоичник
Код: pascal
1.
q.SQL.Text:='Select dbo.AccountIdOnChipCode('+#39+data+#39+') AccountID';


А так же замечено, что подставляется что-то нечто слово целиком. Т.е. слово до пробела.

Необходимо убедиться, что в строковой переменной data нет символов #00 (после слова целиком).
Предполагаю, что метод TStrings.SetTextStr (вызываемый при q.SQL.Text:=) использует терминальный ноль как признак окончания входной строки.
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502584
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UridianДвоичник
Код: pascal
1.
q.SQL.Text:='Select dbo.AccountIdOnChipCode('+#39+data+#39+') AccountID';


А так же замечено, что подставляется что-то нечто слово целиком. Т.е. слово до пробела.

Необходимо убедиться, что в строковой переменной data нет символов #00 (после слова целиком).
Предполагаю, что метод TStrings.SetTextStr (вызываемый при q.SQL.Text:=) использует терминальный ноль как признак окончания входной строки.
То что я отлавливаю трассировкой на SQL, так это вообще какой-то шлак и не понятно, как он туда попадает.
Будто из кучи берет какие-то рандомные значения не понятных указателей.
В эти функции эти слова вообще не должны никак подставляться.
Иными словами это не обрезки чего-то ожидаемого. Ав вообще левак из не понятно откуда.
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502586
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

Параметры не решили проблему?
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502643
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осталось увидеть, что такое data
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502678
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpДвоичник,

Параметры не решили проблему?
Наблюдаю еще

schiОсталось увидеть, что такое data
Код: sql
1.
select AccountIdOnChipCode('0000ABCDEF') as AccountID
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502702
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДвоичникschiОсталось увидеть, что такое data
Код: sql
1.
select AccountIdOnChipCode('0000ABCDEF') as AccountID



Жаль, что так и не удалось услышать начальника транспортного цеха.
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502714
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiЖаль, что так и не удалось услышать начальника транспортного цеха.

Код: pascal
1.
Data: String
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502749
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДвоичникschiЖаль, что так и не удалось услышать начальника транспортного цеха.

Код: pascal
1.
Data: String



Тогда у тебя нет проблем и непонятно, зачем ты создал ветку. Мне из тебя вытягивать сведения ни к чему.
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502755
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Извини, мне не всегда понятно, что спрашивают.
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502802
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник schi,

Извини, мне не всегда понятно, что спрашивают.

Желательно показать, как и чем заполняется переменная Data
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502814
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiДвоичник schi,

Извини, мне не всегда понятно, что спрашивают.

Желательно показать, как и чем заполняется переменная Data
Ох, это совсем не просто...
Есть устройство, считыватель чипкода с индукционной обмотки пластиковых карт. Оно работает на драйвере в Win. К дарйверу слушателем написана dll, в которой немеряное количество кода. Мое приложение динамичеки открывает эту библиотеку и постоянно опрашивает ее на получение значения по событию.
События всего два - приложена карта и снята карта.
Извините, но фрагменты кода выкладывать не могу, да и их слишком много. Муторные.
Единственное только функцию формирования чипкода пожалуйста

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function ZKeyNumToHex(Const ANum: TZ_KeyNum): String;
var
  i: Integer;
begin
  ASSERT(ANum[0] < Length(ANum));
  Result := '';
  for i := ANum[0] downto 1 do
    Result := Result + IntToHex(ANum[i], 2);
end;
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39502873
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

тогда я могу посоветовать перед тем, как передавать значение переменной в текст SQL, выводить его в файл, в тех же апострофах. И посмотреть, что выводится.
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39503201
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiДвоичник,

тогда я могу посоветовать перед тем, как передавать значение переменной в текст SQL, выводить его в файл, в тех же апострофах. И посмотреть, что выводится.

Я так и сделал. Тоже веду наблюдения
...
Рейтинг: 0 / 0
Вместо переменных в трассировке ловлю не мои значения
    #39522014
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpДвоичник,

Что-то типа (псевдокод):
Код: pascal
1.
2.
q.SQL.Text:='Select dbo.AccountIdOnChipCode(:code) AccountID';
q.Params['CODE'].AsString := data;



Спасибо! проблема решена.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вместо переменных в трассировке ловлю не мои значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]