Delphi: “Объект параметра неправильно определяется. Непоследовательная или неполная информация была предоставлена”.

Я в согласии с OP здесь - никакая капча - это не очень woot способ сделать вещи.

Во-первых поставил несколько капканов бота. Я упоминал бы BOC чаще на домашней странице, для захвата ботов во взгляд, поскольку боты не интеллектуальны, поэтому снова формулируя отличающийся каждый раз, например, "жалобы BOC!" - таким образом, боты, просто сканируя для ключевых слов будут захвачены.

Однако я думаю, что реальная проблема здесь является двукратной, во-первых проблемы производительности, что у Вас есть потребность, которая будет обращена, сегодня это - боты, вызывающие проблему, но она указывает мне, что существует проблема производительности, которая будет обращена.

, Во-вторых, это - бизнес-возможность сместить немного реального дерьма с прибылью. Таким образом, я оставался бы с полным стилем woot и состоянием, "мы проверяем на ботов. Если мы будем думать, что Вы - бот, то Вы получите поле botcrap".

проверка бота была бы сделана офлайн когда-то после того, как продажа была сделана, с помощью прерываний бота, IP-адресов, cookie, сессий, строки браузера и т.д. Делают некоторый серьезный анализ с данными, которые Вы имеете покупателей для решения, кто получает botcrap. Если Вы решаете поставить botcrap - затем можно освободить немного нормального дерьма, чтобы продать кому-то еще.

6
задан Acron 22 August 2009 в 20:55
поделиться

6 ответов

Чтобы эта работа работала, вы должны использовать каждый параметр только один раз в предложении SQL. Чтобы использовать один и тот же параметр более одного раза, просто объявите его с новым именем. Не знаю, почему это так, но знаю, что это может сильно раздражать.

11
ответ дан 8 December 2019 в 14:45
поделиться

У меня была возможность попробовать это с компилятором :) Я должен когда-нибудь установить его дома.

Хотя я все еще нахожу ваше использование WITH необычным, похоже, он работает В ПОРЯДКЕ.

Я видел ошибку, которую вы получаете в нескольких случаях:

  1. Попытка выполнить более одного запроса против соединения сразу (из-за потоковой передачи или таймера + processMessages)
  2. С TADOStoredProc, когда имя процедуры неверно
  3. Иногда, если ADO не может проанализировать запрос - не может проверить это без вашей схемы БД. что в SQL Server нет необходимости явно определять тип параметра. Они автоматически назначаются событием OnChanged, прикрепленным к объекту SQL TStringList.

    В результате лучше всего либо назначить свойство SQL.Text (как вы), либо, если вы используете .Add ('SELECT ...'), использовать пару SQL.BeginUpdate / SQL.EndUpdate.

    Исходный ответ:

      with AQ_Query do
      begin
        try
          AQ_Query := TADOQuery.Create(nil);
          ConnectionString := strConnectionString;
    

    Хотя это, кажется, работает, кажется немного странным ссылаться на объект до его создания.

    AQ_Query должен быть создан перед оператором with:

      AQ_Query := TADOQuery.Create(nil);
      with AQ_Query do
      begin
        try
          ConnectionString := strConnectionString;
    

    Еще лучше не использовать WITH - это вызывает проблемы.

    Также обратите внимание, что создание объекта должно быть ДО попытки .. наконец. Как написано, у вас будет предупреждение компилятора. Не игнорируйте их - они помогут вам писать лучший код.

2
ответ дан 8 December 2019 в 14:45
поделиться

Хотя эта ошибка сложна, вы можете достаточно ее диагностировать, чтобы убедиться, что ваш запрос действителен. Проблема в ваших параметрах. Лучший способ найти истинную проблему - это заставить SQL Server Profiler отслеживать вашу базу данных при поступлении запроса. Он покажет вам, как интерпретировались параметры. Скопируйте этот запрос в текстовый редактор, чтобы узнать, в чем заключается ваша проблема.

Если вы не можете использовать SQL Server Profiler, вы должны просто вывести значения «BenuNr» и «strToken» на экран или консоль, чтобы вы могли действительно посмотрите, что вы передаете в качестве параметров.

1
ответ дан 8 December 2019 в 14:45
поделиться

Вам не нужно указывать DataType . После успешного вызова Prepare; параметры должны быть настроены правильно на основе определения таблицы сервера.

Я предполагаю, что, назначив DataType , параметр, вероятно, будет сброшен и некоторая информация отсутствует, например, ParamType должен быть ptInput , но сброшен на ptUnknown или что-то в этом роде.

Попробуйте удалить те строки, где вы установили DataType и посмотрите, поможет ли это.

0
ответ дан 8 December 2019 в 14:45
поделиться

Ой. Вы просто попадаете в то, что наш системный архитектор на работе называет «худшей ошибкой в ​​истории». Это довольно общая ошибка, которая может означать разные вещи. Но я когда-либо видел это только в операторах INSERT, поэтому попробуйте поискать там. Это вызвано определением, что ADO каким-то образом не соответствует схеме базы данных.

Попробуйте сократить свой запрос, чтобы выполнить только вставку, и используйте профилировщик SQL, включенный в SQL Management Studio, чтобы посмотреть, что ADO делает, когда запускает его. . Скорее всего, он запросит структуру вашей таблицы, сравнит ее со структурой вашего оператора и, в конечном итоге, ему не понравится то, что он найдет, и никогда не отправит команду INSERT в базу данных.

Убедитесь, что вы сделали это. получили правильные типы данных в полях, и что вы можете успешно запустить INSERT в эту таблицу, используя только эти два значения. Это может не сработать - это , в конце концов, худшая ошибка, но она должна дать вам отправную точку.

0
ответ дан 8 December 2019 в 14:45
поделиться

Until now, I did not fix the problem.

But I guess the issue lies somewhere inside the Parameters and how they are accessed. The compiler picks them by index, not by name as I was assuming.

Having a closer look at the TADOQuery Component in the OI (especially at the TParameters section) you can see that indexes.

In the end it it probaply neccecary to first, add a parameter, assign a name to it and then insert a value, or something like this.

1
ответ дан 8 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: