Как присвоить вывод SQL запроса переменной.

Добрый день. Возникла необходимость присвоить переменной вывод SQL запроса.

Есть такой запрос:

int              CCurrencyEntry::LoadLastSU()
{
    String(
    "SELECT"
    "SU"
    "FROM Currency_history "
    "where id=(select max(id) from currency_history";
}

и он ошибок не выдает. В ручном режиме запрос выводит нужные данные.

Пытался сделать так:

int              CCurrencyEntry::LoadLastSU()
{
int  tmp =    
String(
    "SELECT"
    "SU"
    "FROM Currency_history "
    "where id=(select max(id) from currency_history";
}

ругается на то, что не может преобразовать тип данных из string в int.

С помощью функций преобразования пытался преобразовать тип, но тоже неудачно.

Может я изначально неправильно делаю? Гуру, подскажите плиз.

Единственно, что я понял, что вы, батенька, пургу гоните-с.

Первый приведенный тобой фрагмент кода даже не скомпилируется, не говоря уже о том, что он работает и ошибок не выдает. Это раз.

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

Предложение SQL закодировано на С++ с ошибками. (В добавление к предыдущему пункту.) Это три.

Лечение: курите маны и вам воздастся.

Хм... запрос с ошибкой? Но он компилируется нормально в таком виде:

void              CCurrencyEntry::LoadLastSU()
{
    String(
    "SELECT"
    "SU"
    "FROM Currency_history "
    "where id=(select max(id) from currency_history");
}

Компилировал в с++Builder
Вручную запрос делал в IBExpert.

Делал по аналогии с этого работающего запроса:

String              CCallEntry::GetQuerySelectAll(String Filter)
{
    String All(
    "SELECT "
    "Opers.ID, Opers.Number, Opers.OpDate, Opers.Client, Opers.Posted, "
    "Opers.WriteDate, Opers.WriteTime, Opers.OpComment, "
    "Opers.Autor, "
    "(SELECT Clients.Name FROM Clients WHERE Opers.Autor = Clients.ID) AuthorName, "
    "Calls.Ingener Ingener, "
    "(SELECT Clients.Name FROM Clients WHERE Calls.Ingener = Clients.ID) IngenerName, "
    "Calls.ClientName ClientName, "
    "Calls.ClientAddress ClientAddress, "
    "Calls.ClientPhone ClientPhone, "
    "Calls.Cause Cause, "
    "Calls.Model Model, "
    "Calls.DatePered DatePered, "
    "Calls.DateVypoln DateVypoln, "
    "Calls.ClientAsComment ClientAsComment, "
    "Calls.SerialNumber SerialNumber, "
    "Calls.Completeness Completeness, "
    "Calls.ContactPerson ContactPerson, "
    "Calls.LastAuthor LastAuthor, "
    "(SELECT Clients.Name FROM Clients WHERE Calls.LastAuthor = Clients.ID) LastAuthorName, "
    "Calls.LastDate LastDate "
    "FROM Opers "
    "JOIN Calls ON Opers.ID = Calls.ID "
   );

Вот в таком виде этот фрагмент скомпилируется. Одна скобочка, а как все меняется!

Но два и три из моего предыдущего поста все равно остались.

Далее... Я не представляю с каким фреймворком ты работаешь, о некоторых вещах могу догадываться только исходя из общего синтаксиса.

String — по ходу, класс. В первом куске кода написано String("bla-bla-bla"); — т.е. вызывается конструктор с аргументом. Создаётся временный объект, который тут же и умирает, т.к. не только ни где не используется, но ему даже идентификатор не присваивается. (А оптимизирующий компилятор даже и объект создавать не будет).

Во втором куске написано String All("bla-bla-bla");. Здесь тоже вызывается конструктор с аргументом. Но, по крайней мере, теперь к создаваемому объекту можно обратиться по имени. Подозреваю, что в дальнейшем этот объект типа String где-то наверное используется. (Если, конечно, этот запрос действительно работающий, а не как в прошлый раз.)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

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

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.