считывать строку по услувию

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: считывать строку по услувию

Сообщение Mekhtiev »

щас у меня голова лопнет, тыкните мне на ошибку плииз, игнорируются условия, запмсывает сё подряд

Код: Выделить всё

procedure LoadFile;
{

      gfFile.OpenFile(filename, stOpenRead);
      gfFile.ReadLn(str);
      while not gfFile.EOF() do

      {
        gfFile.ReadLn(str);
          str:=AnsiToOem(str);
          str:=Replace(str, '"', '');
          f_Tmarka:=substr(str,1, instr('_',str)-1);
           str:=substr(str,(instr('_', str)+1), 50);
          f_Tnumber:=substr(str,1, instr(';',str)-1);
          // message (instr(';', str));
               str:=substr(str,(instr(';', str)+1), 50);
        //  message(str);
          str:=Replace(str, 'км', '');
           //message(str);
          f_probeg:=double(Trim(substr(str,1, instr(';',str)-1)));

              if
                (
                getfirst wialonzapravki where
                ((f_Tmarka ==   wialonpoezdki.Tmarka(noindex)
               and f_Tnumber   == wialonpoezdki.Tnumber(noindex)
               and f_probeg ==  wialonpoezdki.probeg(noindex)
                )))<>tsok
      //  ClearBuffer(tnwialonpoezdki);
         {insert current wialonpoezdki set
              wialonpoezdki.Tmarka:= f_Tmarka,
              wialonpoezdki.Tnumber:= f_Tnumber,
              wialonpoezdki.probeg:= f_probeg
         }
         else ('Данные за этот период уже записанные, выберите другой период')
        }    
ВБР РУЛИТ)))ИС3
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: считывать строку по условию

Сообщение KATZ »

Как минимум, это:
if
(
getfirst wialonzapravki where
((f_Tmarka == wialonpoezdki.Tmarka(noindex)
and f_Tnumber == wialonpoezdki.Tnumber(noindex)
and f_probeg == wialonpoezdki.probeg(noindex)
)))<>tsok
И еще индексы нужные сделайте, в своих таблицах ничто не мешает любые индексы создать.
Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: считывать строку по услувию

Сообщение Mekhtiev »

да невнимательность вчера была на высоте, исправил, результат - в браусе фейса не дублируются подгружаемые записи, а в таблицу галактики дублируются. щас почитаю как индексы сделать, результат напишу
ВБР РУЛИТ)))ИС3
Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: считывать строку по услувию

Сообщение Mekhtiev »

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

Код: Выделить всё

procedure LoadFile;
{

      gfFile.OpenFile(filename, stOpenRead);
      gfFile.ReadLn(str);
      while not gfFile.EOF() do

      {
        gfFile.ReadLn(str);
          str:=AnsiToOem(str);
          str:=Replace(str, '"', '');
          f_Tmarka:=substr(str,1, instr('_',str)-1);
           str:=substr(str,(instr('_', str)+1), 50);
          f_Tnumber:=substr(str,1, instr(';',str)-1);
          // message (instr(';', str));
               str:=substr(str,(instr(';', str)+1), 50);
        //  message(str);
          str:=Replace(str, 'км', '');
           //message(str);
          f_probeg:=double(Trim(substr(str,1, instr(';',str)-1)));
    if

              (
         getfirst FastFirstRow    wialonpoezdki where
                ((f_Tmarka     == wialonpoezdki.Tmarka(noindex)
               and f_Tnumber   == wialonpoezdki.Tnumber(noindex)
               and f_probeg    == wialonpoezdki.probeg(noindex)
                ))
              )<>tsOk

      //  ClearBuffer(tnwialonpoezdki);
         {insert current wialonpoezdki set
              wialonpoezdki.Tmarka:= f_Tmarka,
              wialonpoezdki.Tnumber:= f_Tnumber,
              wialonpoezdki.probeg:= f_probeg
         }
         else ('Данные за этот период уже записанные, выберите другой период')

         stmt:= sqlAllocStmt;
      }


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

Код: Выделить всё

_loop wialonpoezdki

{
sqlPrepare(stmt, 'savefromwialonpoezdki(?,?,?)');
sqlBindParam(stmt, 1, wialonpoezdki.Tmarka);
sqlBindParam(stmt, 2, wialonpoezdki.Tnumber);
sqlBindParam(stmt, 3, wialonpoezdki.probeg);


SqlExecute(stmt);
}                  
буду побеждать дальше, если кто нибудь может подсказать и ускорить мою победу буду признателен.
ВБР РУЛИТ)))ИС3
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: считывать строку по услувию

Сообщение m0p3e »

Для этого нужно знать структуру таблицы, в которую пишется.
Если там есть нужный индекс то, проверять наличие записи в таблице напрямую.
Если индекса нет, то возможны варианты:
- сначала выгрузить ключевые данные из физической таблицы во временную и проверять в ней с последующей заливкой в отсутствующих записей.
- временную таблицу оформить как sqlCreateTable доработать процедуру savefromwialonpoezdki(?,?,?) прямым обращением к ней с соответствующей проверкой.
- ....
вариантов можно придумать много. Главное, что б хватило знаний их реализовать. :) Реально на решение данной задачи хватило бы полдня.
Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: считывать строку по услувию

Сообщение Mekhtiev »

Код: Выделить всё

ALTER PROCEDURE S$SAVEFROMWIALONPOEZDKI( 
	
	@Tmarka varchar(50),
	@Tnumber varchar(50), 
	@Probeg numeric(18, 0)
	
) AS 
BEGIN
	INSERT INTO [a$Wialonpoezdki]
	(	

		
		Tmarka,
		Tnumber,
		Probeg
		
	)
	VALUES
	(
		
		@Tmarka,
		@Tnumber,
		@Probeg
		
	)

END
Зачем так пугать? какие пол дня??? это для Вас пол дная, значит для меня пару суток. :shock:
знаний то и не хватает вот в чем проблема. думаю узвращатся зад процедурой, как то там реализовать проверку
ВБР РУЛИТ)))ИС3
Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: считывать строку по услувию

Сообщение Mekhtiev »

таблицу, процедуру, все я сам создовал.
ВБР РУЛИТ)))ИС3
Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: считывать строку по услувию

Сообщение Mekhtiev »

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

Код: Выделить всё

ALTER PROCEDURE S$SAVEFROMWIALONPOEZDKI( 
	
	@Tmarka varchar(50),
	@Tnumber varchar(50), 
	@Probeg numeric(18, 0)
	
) AS 
IF NOT EXISTS 
(
SELECT Tmarka,Tnumber,Probeg
 FROM a$Wialonpoezdki 
WHERE Tmarka = @Tmarka and Tnumber=@Tnumber and Probeg=@Probeg
) 
BEGIN
	INSERT INTO [a$Wialonpoezdki]
	(	

		
		Tmarka,
		Tnumber,
		Probeg
		
	)
	VALUES
	(
		
		@Tmarka,
		@Tnumber,
		@Probeg
		
	)

END
полученный результат начал удовлетворять. з.ы. меньше чем пол дня ушло. спасибо за советы и подсказки. респект всем участникам форума.
ВБР РУЛИТ)))ИС3
Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: считывать строку по услувию

Сообщение Mekhtiev »

1 дней 7:18:54
с такой строкой что подскажите делать???
ужас как увидел в поле с длительностью поездки, плохо стало.
7:18:54 я б в time перевел с бинари(4).
ВБР РУЛИТ)))ИС3
Ответить