Запрос не определяется текстом

#sql #ruby #shoes

#sql #ruby #Туфли

Вопрос:

В чем ошибка?

Если запрос на жестко запрограммированный ‘test’ вместо @edit.text, то выполняется успешно, но если используется переменная, то запрос завершается неудачей.

 require 'sqlite3'

Shoes.app do

  db = SQLite3::Database.new("test.db")
  db.execute("create table t1 ( one VARCHAR(30), two INTEGER )")
  db.execute("insert into t1 ( one, two ) values ('test', 55)")

  @edit = edit_line

  button 'Search' do
    db.execute("select * from t1 where one = ?", @edit.text) do |rows|
      @test_out.text = rows
    end
  end

  @test_out = para ''

end
  

PS После некоторых экспериментов я решил этот вопрос таким образом:

 button 'Search' do
  text = @edit.text.force_encoding("UTF-8")
  db.execute("select * from t1 where one = ?", text) do |rows|
  @test_out.text = rows
  end
end
  

но мой файл в кодировке UTF-8

или следующим образом:

 button 'Search' do
  text = ''
  @edit.text.each_char { |ch| text << ch }
  db.execute("select * from t1 where one = ?", text) do |rows|
  @test_out.text = rows
  end
end
  

почему такое странное поведение?

Комментарии:

1. в этом примере, если вы введете в edit_line ‘test’, мы должны получить вывод ‘test55’, но, к сожалению, ничего не отображается. Почему?

2. есть ли какие-либо ошибки при нажатии alt / ?

3. Нет, нет. Я не знаю, куда копать.

Ответ №1:

Это работает

 db.execute("select * from t1 where one = ?", "#{@edit.text}") do |rows|
  @test_out.text = rows
end
  

но это действительно, действительно странно. Я попытаюсь разобраться.