rezki_z Ответов: 1

Недопустимое имя столбца в delphi


У меня есть проблема с этим кодом, и я не знаю, как ее исправить.

Что я уже пробовал:

ADODataSet1.Close;
  if ListFiltr1.ItemIndex = 0 then
    ADODataSet1.CommandText :=
      'select [EmployeeID],LastName,FirstName,Title,City from Employees where '
      + ListeChampTxt.Items[ListeChampTxt.ItemIndex] +'= "' + TxtCherche.text +
      '" order by ' + ListTrie.Items[ListTrie.ItemIndex] + TxtTrie;
   ADODataSet1.Active := True;
   ADODataSet1.Requery();
end;

1 Ответов

Рейтинг:
0

OriginalGriff

Начните с того, что не делайте этого! Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Затем используйте отладчик, чтобы точно узнать, какую строку вы генерируете: я бы заподозрил этот бит:

... order by ' + ListTrie.Items[ListTrie.ItemIndex] + TxtTrie ...
Поскольку вы не закрываете кавычки, и я почти уверен, что открытая цитата - это не то, что вы хотели, но поскольку все зависит от данных в Ваших полях, мы не можем сказать-и Вы тоже не можете, не используя отладчик, чтобы точно узнать, что отправляется в БД.


rezki_z

У меня есть полный код, но эта часть показывает мне сообщение об ошибке, и я знаю, что проблема находится в+'="'+, но я не знаю, как это исправить

OriginalGriff

Затем используйте отладчик, чтобы точно узнать, что вы генерируете. Сравните это с тем, что вы хотели создать, и проблема должна быть очевидной.

rezki_z

Этот код покажи мне вот это


выберите [EmployeeID], фамилия,имя, должность, город из списка сотрудников, где фамилия= " любое имя"
заказ на [Кодсотрудника] АСК
И это не правильно и я хочу этого

выберите [EmployeeID], фамилия,имя, должность, город из списка сотрудников, где фамилия= 'anyname'
заказ на [Кодсотрудника] АСК

Но я не знаю как это изменить я пробую все

OriginalGriff

"Код показывает мне это"
Нет, это не так. Вы читаете то, что хотели написать, а не то, что написали.
Используйте отладчик. Это не сложно, и он покажет вам точно, что ваш код на самом деле сделал.

Не бойтесь этого-это величайший инструмент, с которым вы можете играть!

rezki_z

Уэй мне нужно найти проблему и я уже знаю ошибку но я не знаю как ее исправить и я уже сказал вам где ошибка

OriginalGriff

Нет, не знаешь. Вы угадали "проблема есть", не глядя на то, что вы на самом деле сделали, и не думая об этом. Взгляд на код объективно показывает, что вы набираете не то, что вы думали, что набрали.

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

Да, я знаю, что это кажется большой работой,причем ненужной. Но именно так вы учитесь навыку: используя его. Так что попробуйте!

rezki_z

Я уже нахожу половину ответа и просто у меня есть проблема с порядком по виду

иначе если ListFiltr1.ItemIndex = 2 тогда
ADODataSet1.свойство CommandText :=
"выберите [EmployeeID],фамилию, имя, должность, город из списка сотрудников, где"
+ ListeChampTxt.Элементы[ListeChampTxt.ItemIndex] + 'like' +
quotedstr (TxtCherche.text) + '%" order by ' + ListTrie.Пункты[ListTrie.ItemIndex]
+ TxtTrie
иначе если ListFiltr1.ItemIndex = 3 тогда
ADODataSet1.свойство CommandText :=
"выберите [EmployeeID],фамилию, имя, должность, город из списка сотрудников, где"
+ ListeChampTxt.Элементы[ListeChampTxt.ItemIndex] + 'like"%' +
quotedstr (TxtCherche. text) + '"order by' + ListTrie.Пункты[ListTrie.ItemIndex]
+ TxtTrie
еще
ADODataSet1.свойство CommandText :=
"выберите [EmployeeID],фамилию, имя, должность, город из списка сотрудников, где"
+ ListeChampTxt.Элементы[ListeChampTxt.ItemIndex] + 'like"%' +
quotedstr (TxtCherche.text) + '%" order by ' + ListTrie.Пункты[ListTrie.ItemIndex]
+ TxtTrie;

ADODataSet1.Активный := True;
ADODataSet1.Обновление();


конец;

OriginalGriff

Да. Я знаю.
И если бы * вы использовали bedugger, чтобы посмотреть на то, что вы создали*, было бы очевидно, в чем проблема.

Есть ли смысл мне говорить вам, что делать, если вы просто собираетесь игнорировать это?

rezki_z

Извините я здесь чтобы узнать но я не знаю что вы имеете в виду под отладкой я думаю вы имеете в виду запустить программу и прочитать сообщение об ошибке и я сделал это и дайте мне неверное имя столбца и извините

OriginalGriff

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

Это очень мощный инструмент, и вам нужно с ним ознакомиться.
Я не могу дать вам явные инструкции для вашей конкретной системы разработки (отчасти потому, что я понятия не имею, что вы используете, а отчасти потому, что это очень маленькое текстовое поле), но Google может. Google для "отладчика" и названия вашей IDE, и вы должны получить полные инструкции.

Дайте ему попробовать!

rezki_z

У меня есть вопросы вы Сеад вы можете найти ошибку внутри любой строки как вы знаете что ошибка принадлежит конкретной строке и как вы находите решения для любой проблемы потому что я запасаюсь кодом на неделю и ничего не нахожу

OriginalGriff

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

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

Вы застряли так долго, потому что не думаете о «проблеме в целом» - вы настроены на «это правильно», а не на «что не так?». Использование отладчика дает вам дополнительную информацию, которая позволяет взглянуть на проблему с другой стороны, и которую вы не сможете легко получить, просто взглянув на код. Это похоже на вождение машины: выглядит просто, когда это делает ваш папа, но когда вы сидите там с работающим двигателем и вам нужно выехать на движущийся поток, не ударившись ни о чем в первый раз, это внезапно становится тяжелее! Вот почему водителям-ученикам не разрешается оставаться в одиночестве - им нужны инструкции и руководство (а иногда и паническое торможение и / или рулевое управление) от опытного человека.
В этом случае "опытный драйвер" - это отладчик.

rezki_z

Есть некоторые думают что я не хочу быть коллекционером я не хочу собирать коды я хочу думать и писать свой собственный код и решать свою собственную проблему но это трудно я даже не могу понять код так как я могу найти решения я не знаю что делать у меня нет тетчера и если у меня есть они не помогают потому что они не хотят быть лучше чем он я потерян

OriginalGriff

Затем возьмите книгу - Эддисон Уэсли и Роксана делают хорошие книги-и поработайте над ней. Это не так хорошо, как учитель (вы не можете задавать вопросы книге), но это поможет вам пройти через это и, надеюсь, не ошеломит вас в то же время.
У меня такое чувство, что в данный момент Вы находитесь здесь не в своей тарелке, и вам нужно сделать шаг или два назад и сначала лучше охватить основы.

rezki_z

Спасибо Чувак я нашел все проблемы и исправить это, и код работает очень хорошо, но человек, которого я люблю вас, потому что вы помочь мне, поэтому я хочу помочь вам стать мусульманином, потому что только мусульмане попадают в рай hnow кун я тебя Лаф, но принимать меня всерьез, может быть, ты тратишь все свое видео на код, но я его тратить на поиск Бога, он есть у нас скайп и говорить об истинной религии, если ю победит с evedense я превращу в свой relegion если я выиграю, ты ислам принять его серьезно, пожалуйста, вы не потеряете какие-либо думать, просто я говорю А ты спрашиваешь про всякое вы хотите, и я дам вам правильный ответ Спасибо