Страница 2 из 2
Re: считывать строку по услувию
Добавлено: 22 апр 2013, 16:19
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 ('Данные за этот период уже записанные, выберите другой период')
}
Re: считывать строку по условию
Добавлено: 22 апр 2013, 22:38
KATZ
Как минимум, это:
if
(
getfirst wialonzapravki where
((f_Tmarka == wialonpoezdki.Tmarka(noindex)
and f_Tnumber == wialonpoezdki.Tnumber(noindex)
and f_probeg == wialonpoezdki.probeg(noindex)
)))<>tsok
И еще индексы нужные сделайте, в своих таблицах ничто не мешает любые индексы создать.
Re: считывать строку по услувию
Добавлено: 23 апр 2013, 09:43
Mekhtiev
да невнимательность вчера была на высоте, исправил, результат - в браусе фейса не дублируются подгружаемые записи, а в таблицу галактики дублируются. щас почитаю как индексы сделать, результат напишу
Re: считывать строку по услувию
Добавлено: 23 апр 2013, 11:11
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);
}
буду побеждать дальше, если кто нибудь может подсказать и ускорить мою победу буду признателен.
Re: считывать строку по услувию
Добавлено: 23 апр 2013, 11:27
m0p3e
Для этого нужно знать структуру таблицы, в которую пишется.
Если там есть нужный индекс то, проверять наличие записи в таблице напрямую.
Если индекса нет, то возможны варианты:
- сначала выгрузить ключевые данные из физической таблицы во временную и проверять в ней с последующей заливкой в отсутствующих записей.
- временную таблицу оформить как sqlCreateTable доработать процедуру savefromwialonpoezdki(?,?,?) прямым обращением к ней с соответствующей проверкой.
- ....
вариантов можно придумать много. Главное, что б хватило знаний их реализовать.
Реально на решение данной задачи хватило бы полдня.
Re: считывать строку по услувию
Добавлено: 23 апр 2013, 11:37
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
Зачем так пугать? какие пол дня??? это для Вас пол дная, значит для меня пару суток.
знаний то и не хватает вот в чем проблема. думаю узвращатся зад процедурой, как то там реализовать проверку
Re: считывать строку по услувию
Добавлено: 23 апр 2013, 11:39
Mekhtiev
таблицу, процедуру, все я сам создовал.
Re: считывать строку по услувию
Добавлено: 23 апр 2013, 13:35
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
полученный результат начал удовлетворять. з.ы. меньше чем пол дня ушло. спасибо за советы и подсказки. респект всем участникам форума.
Re: считывать строку по услувию
Добавлено: 29 апр 2013, 10:40
Mekhtiev
1 дней 7:18:54
с такой строкой что подскажите делать???
ужас как увидел в поле с длительностью поездки, плохо стало.
7:18:54 я б в time перевел с бинари(4).