BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Запись в таблицу из FR 2.5, как записать данные в таблицу при печати отчета?
 
БЭСТ-4, FastReport 2.5
Задача следующая: мы вместе с накладными выдаем клиенту купоны, которыы нужно учитывать. Для этого мне нужно при печати или при нажатии в форме ввода параметров кнопки "Печать", добавить запись в таблицу DELLORS.DBF (FoxPro 2.6), находящуюся в DBASE\SCLAD

Я уже пытался создать запрос разными способами, сначала я создал клмпонент "база данных" dbSclad со строкой подключения: "\путь\DBASE\SCLAD\", потом создал компонент "таблица" tblDellors, потом попытался создать запрос SQL, но в списке DSName не было походящего источника.

Тогда я нашел таблицу SOURCES.DBF и добавил туда строку 00099 dbf.dellor с таким SQL: "SELECT * FROM [sclad\DELLORS] as dellors" и поудалял все предыдущие подключения и создал запрос qryDellors (база: DatabaseBEST4, DSName: dbf.dellor, SQL: "INSERT INTO [SCLAD\DELLORS] (DLRNO, DLRDATE, AGENTCODE) VALUES (1, '01-01-08', '000123')

На что получаю ошибку "qryDellor: error 7200: AQE Error: State = S0000; NativeError = 2124; [Extended Systems][Asvantage SQL Engine]Invalid Operand for operator: <>

Если сделать SELECT запрос без INSERT INTO, то данные из DELLORS.DBF нормально выводятся в отчете, но мне нужно именно добавлять запись в таблицу.

Вообще, я не очень понимаю, возможно ли средствами FastReport выполнить INSERT INTO запрос. Подскажите, что я не так делаю, либо как вообще можно решить мою задачу

И как потом этот запрос запустить?
 
Я давно уже не читал доки по 2.5-му ФастРипорту, но ИМХО это как раз туда: дело в том, что оно использует движок запросов от Advantage DS, а там язык SQL довольно сильно "урезан", и кое-каких команд/параметров просто нет. Насколько помню, в доках от ФастРипорта описание Advantage SQL есть... :surprise:
 
Надо выбрать компонент 'запрос', в его SQL написать что-нибудь типа
Код
insert into [sclad\\mytadle] (<поле1>,<поле2>,...) values (<значение1>,<значение2>,...)

а в коде <имя запроса>.ExecSQL
У меня так работает
 
ну, я так и делаю (я же написал в первом сообщении, какой запрос я писал), только он все время выдает ошибку

Сейчас попробовал еще раз без всяких там изменений в SOURCES.DBF. Такая же ошибка: Invalid pperand for operator
 
Добрый день!
FastReport для таких работ не предназначен. Рекомендую Вам разработать спецфункцию, которая сформирует все необходимые данные.
 
Насчет invalid operand: ADS хочет дату в формате 'YYYY-MM-DD', а второй параметр у тебя похоже дата, попробуй как '2008-01-01'
 
Андрею: да нет, дата тут не при чем. он и без этого поля выдает такую же ошибку.

Дмитрию: Это нужно написать DLL и вызывать функцию из FastReport?
 
Если поможет, вот из хелпа про NativeError = 2124:
Код
Problem:  The SQL engine encountered the use of an operator that was not compatible with the operands. For example, the LIKE operator cannot be used with date fields. Also, you cannot compare mismatched data types. For example, "… WHERE datefield = numericfield" is not valid.

Хочешь пришли отчет и таблицу, вдруг чем помогу.
 
Еще помучался, перепробовал все что угодно, но ничего не получалось. Или ошибки или никакой реакции.

А потом посмотрел в таблицу, а там появились новые записи, созданные мною!!!

Но вот Вопрос: как я это сделал??? Последние варианты не работали.

Вот последние 2 варианта кода, пожалуйста посмотрите, что неправильно. Таблицу DELLORS я переместил в BEST\DBASE и поле дата не трогал, чтобы упростить задачу.

1. В форме есть объект SQL Query - Qry1
Код
[B]begin[/B]
  Qry1 := TAdsQuery.Create('DatabaseBest4');  //пробовал nil или self
  Qry1.DatabaseName := 'DatabaseBest4';   
  Qry1.Close;  
  Qry1.Active := 0;
  Qry1.RequestLive := true; //это даже не знаю, что такое - взял из чужого примера
  Qry1.SQL.Clear;
  Qry1.SQL.Add( 'INSERT INTO DELLORS ( DLRNO ) VALUES ('+'''555666'''+')' );
  Qry1.VerifySQL;
  Qry1.Active := 1;
  Qry1.ExecSQL;
  Qry1.Close;
[B]end[/B]


2. При некоторых обстоятельствах скрипт ругался, что INSERT INTO не возвращает набор данных (или как-то так), нужно использовать TAdsQuery, что я тоже попробовал сделать. Пустая форма с объектом DatabaseBest4 и кнопкой:

Код
[B]begin[/B]
     TAdsQuery.Close;
     TAdsQuery.SQL.Clear;
     TAdsQuery.SQL.Add('INSERT INTO DELLORS ( DLRNO ) VALUES ('+'''555666'''+')');
     TAdsQuery.active :=1;
     TAdsQuery.ExecSQL;
     TAdsQuery.Close;
[B]end[/B]


Но в итоге, эффекта я не добился, хотя кое-какие резульаты были.
Вообще, с объектной моделью и описанием свойств и методов комонентов Advantage SQL разобраться я не смог, HELP зачем-то много говорит о синтаксисе (хотя он почти везде одинаковый), а вот об объектах - минимум информации.

Пожалуйста, помогите
 
Создал табл DELLORS с полем DLRNO символьного типа.
На форму положил компонент 'запрос',назвал его TAdsQuery, кнопку с кодом:
Код
begin
TAdsQuery.sql.clear;
TAdsQuery.SQL.Add('INSERT INTO DELLORS ( DLRNO ) VALUES ('+'''555666'''+')');
TAdsQuery.execsql;
end

все работает.
Ошибка про которую вы писали возникает,например,при попытке записи числовых данных в символьное поле. Еще надо внимательней писать имена объектов,потому как если написать неправильно имя запроса (напр. в данном случае TAdsQuery1.execsql), то никаких предупреждений не появится,просто ничего не произойдет.
 
Заработало!!! Вставил ваш код и все заработало. Хотя я был близко, но постоянно где-то ошибался.
Спасибо вам большое, Андрей, что прониклись моей проблемой и помогли.

Я просто подумал, что TAdsQuery - это корневой объект, который может выполнять любой запрос на изменение и его не нужно создавать.
Страницы: 1
Читают тему (гостей: 1)