Страница 1 из 1
Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 25 янв 2013, 11:46
Mekhtiev
Уважаемые коллеги, вот только зарегистрировался на форуме. Скажу сразу я "чайник", владею пока только языком SQL и пишу запросы для формирования отчетов. Сейчас встала задача сверять данные с одной программы и галактики, база berkeley с базой не могу работать и поэтоу выгруженные очеты со сторонней программы в формате CSV нужно загружать в созданную таблицу в галактику..Получается что для загрузки нужно написать интерфейс (создовать помоему временную таблицу надо). Обясните мне пожалуйста какие по шагам мне выполнять действия как правильно это реализовать.
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 25 янв 2013, 12:04
RAJAH
Отсюда скачиваем vipprogr.chm, читаем про команду import, переводим csv в txt и импортируем с помощью модуля "SQL" программы SUPPORT (есть ещё вариант со строчным компилятором вместо support, но для "чайника", боюсь, сложновато будет).
А как Вы собираетесь импортировать, если "с базой не могу работать"?
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 25 янв 2013, 12:34
Mekhtiev
имел ввиду что в Visual Studio не возможно подключаться к базе "беркли" нашей программы , чтоб запросом получать данные и формировать отчет сравнивающий данные с данными в галактике.
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 25 янв 2013, 12:40
Mekhtiev
RAJAH писал(а):Отсюда скачиваем vipprogr.chm, читаем про команду import, переводим csv в txt и импортируем с помощью модуля "SQL" программы SUPPORT (есть ещё вариант со строчным компилятором вместо support, но для "чайника", боюсь, сложновато будет).
А как Вы собираетесь импортировать, если "с базой не могу работать"?
Спасибо за подсказку, но забыл уточнить что создание именно интерфейса нужно, так как выгруженную таблицу с программы мониторинга - регулярно должен специалист другого будет импортировать в галактике, а потом заходя на SQL Server Reporting Services выгружать отчет сравнивающий данные галактики (запрос то напишу без проьлем) и данные программы мониторинга.
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 25 янв 2013, 12:50
RAJAH
Тогда "вариант со строчным компилятором", то бишь батник делать (если я правильно понял, что интерфейс - это то, что будет время от времени запускаться).
Код: Выделить всё
<<каталог Галактики>>vip.exe lot.lot /c:russia81.cfg
где lot.lot - файл с кодом запроса, russia81.cfg - файл с параметрами конфигурации.
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 25 янв 2013, 13:22
m0p3e
Правильнее писать интерфейс и загружать данные с помощью xl-функций.
Mekhtiev черканите письмо m<ноль>p<три>e<at>mail.ru - вечерком скину примерчик какой-нибудь несложный.
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 01 фев 2013, 10:59
Mekhtiev
Vip файл компилируется но результата нету.
Код: Выделить всё
table struct local wialonprobeg //ключевое слово для задания имени физической таблицы, которая является корневой для данного видимого элемента Признак главного (внешнего) цикла по SQL-таблице. Используется в конструкции ".table blank".
(nrec:comp,
Tmarka:string,
probeg:double,
probegs:double )
with index (uniqal=nrec); // задаем индекс
Interface Wialon 'Импорт данных с Wialon' EscClose; //начало описания интерфейса.
show at (,,,); //ключевое слово для задания размеров видимых элементов и окон.
var FileName:string; // раздел объявления переменных.
f_Tmarka:string; f_probeg:double; f_probegs:double;
create view //начало описания логической таблицы.
as
select *//Поле
from wialonprobeg; //из таблицы
File gfFile;
function MyFuncLoadField:string;
{
var str:string;
var ch:char;
str:='';
ch:=chr(0);
while ch=chr(10) or ch=chr(13) or ch=';' or ch=chr(0) do
{
//if gfFile.EOF() break;
gfFile.Read(ch);
}
while ch<>chr(10) and ch<>chr(13) and ch<>';' do
{
//message(string(ch));
//message(str);
str:=str+ch;
//if gfFile.EOF() break;
gfFile.Read(ch);
}
result:=str;
}
procedure LoadFile;
{
gfFile.OpenFile(filename, stOpenRead);
var chek:integer;
chek:=0;
while not gfFile.EOF() do
{
chek :=chek+1;
if chek=10 then break;
f_Tmarka:=MyFuncLoadField();
f_probeg:=MyFuncLoadField();
f_probegs:=MyFuncLoadField();
insert current wialonprobeg set
wialonprobeg.Tmarka := f_Tmarka,
wialonprobeg.probeg := f_probeg,
wialonprobeg.probegs := f_probegs;
}
gfFile.Close();
}
screen vibor; // вид окна
show (,,,);
fields
FileName :pickButton;
buttons
cmBounds;
<<
Выбор файла: .@@@@@@@@@@@@@
<. Загрузка .>
>>
end;
browse tab;
show at(,,,)
table wialonprobeg;
fields
Tmarka #3'Марка' ('Марка ТС',,) : [20], protect;
probeg #3'Пробег' ('Пробег ТС',,) : [20], protect;
probegs #3'Скорректированный пробег' ('Скорректированный пробег ТС',,) : [20], protect;
end;
//Panel TR;
//Show At (,,,)
handleEvent //обработчик событий
cmInit:
{
}
cmPick:
{
Case CurField of
#FileName :
{
FileName := GetFileName ('*.csv','Выберите файл с отчетом Wialon');
Message(filename);
LoadFile();
ReReadRecord(tnwialonprobeg);
};
end; //Case
}
end;
end.
В менеджент студио запрос
select * from A$wialonprobeg
а результата нету
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 01 фев 2013, 11:23
Mekhtiev
Так таблицу создал
Код: Выделить всё
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.A$WialonProbeg
(
nrec binary(8) NOT NULL,
Tmarka varchar(50) NULL,
Probeg numeric(18, 0) NULL,
ProbegS numeric(18, 0) NULL
) ON [PRIMARY]
GO
COMMIT
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 01 фев 2013, 12:11
RAJAH
Mekhtiev писал(а):table struct local wialonprobeg
Mekhtiev писал(а):В менеджент студио запрос
select * from A$wialonprobegа результата нетууууу
Это нормально: таблица wialonprobeg - временная, существует только при выполнении отчёта/интерфейса в "Галактике"/"Суппорте".
А создавать таблицы прямо на SQL сервере, по-моему, без докомпиляции словаря бесполезно (знатоки точно скажут). Не уверен, что этот метод вам нужен - из пушки по воробьям.
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 01 фев 2013, 12:13
Den
Ну то что Вы сделали
CREATE TABLE dbo.A$WialonProbeg
...
в MSSQl Stuido..так не проканает. галактика об этой таблице ничего не знает. Смотрите пост Cruger-a
https://forum.galaktika.ru/viewtopic.php?p=3045#p3045 ( create table....)
table struct local wialonprobeg //ключевое слово для задания имени физической таблицы,
это тоже неправда Этим самым Вы просто создали временную таблицу. Не более...
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 01 фев 2013, 12:17
edward_K
1. отредактируй свои сообщения. Удалю. Эмоции могешь в курилке высказывать. Прежде чем делать что то в галактике надо бы vipprogr.chm пролистать. Никто за вас бесплатно ничего не сделает.
2. Если вы хотите создать таблицу для использования ее в галактике напрямую, то и создавать ее нужно в галактике
- она должна прописаться в x$filles , x$fields, x$index - ищи по форуму "Create Table" или создавай новую тему
код таблицы лучше пихать в 32700 и выше , но меньше чем 32764
Обратите внимание, что Alter Dictionary для создания своих таблиц не следует использовать.
Использовать другие можно, но через DSQL.
3. По возможности следует обходится без создания своих таблиц - для временного использования можно объявить таблицу прямо в фейсе - ищи table struct
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 01 фев 2013, 16:33
Mekhtiev
Всем спасибо за посты, выходные почитаю VIPPROGR. Самая большая проблема в том что очень мало я знаю, не программист я - только учусь. единственное что получается нормально это запросы
но ничего у нас же есть VIPPROGR
.
Re: Экспорт CSV в галактику с созданием польз. интерфеса
Добавлено: 01 фев 2013, 21:36
edward_K
ну вообще в общем случае проблема с csv в большой длине строки (больше 250)
Вы предполагаете, что Read возмет один символ, но это зависит от типа переменной.
Если заведомо известно, что длина строки меньше, то ReadLn и все.
или все таки как вам советовали изучить xl функции (ExcelLib.pdf) - с длинной строкой там все таки проще.
Иначе как то так
Код: Выделить всё
kolstr:=0 ;
chet:=0 ;
kolfield:=0 ;
wstr:='' ;
filesize_read:=0 ;
filesize:=SInp.GetSize
SInp.Seek(0) ;
While not SInp.EOF and (filesize_read<filesize)
{ hprt1 :='' ;
inc(chet)
if chet>1000 then break ;
if chet mod 10=0 then nextvisual ;
// SInp.readln(hprt1) ;
SInp.Seek(filesize_read) ;
SInp.read(hprt1) ;
if length(hprt1)=0 then break ;
filesize_read:=filesize_read+length(hprt1) ;
field_len:=length(hprt1) ;
if filesize_read>filesize
{ field_len:=field_len-(filesize_read-filesize) ;
}
wstr1:=''
for(i:=1;i<=field_len;inc(i))
{
If(((IEHead.Reestr And mskDOS)Shr 04h) = 1)
wstr1:=wstr1+DocBasFn1251To866(substr(hprt1,i,1));
else
wstr1:=wstr1+substr(hprt1,i,1)
}
// здесь не надо конвертировать
// If(((IEHead.Reestr And mskDOS)Shr 04h) = 1)
// hprt1 := DocBasFn1251To866(hprt1);
mylog('строка '+string(chet)+',Длина '+string(field_len)) ;
mylog(wstr1) ;
// if chet=1 then continue ; // первая строка не нужна.
// hprt1:=trim(hprt1) ;
for(i:=1;i<=length(hprt1);inc(i))
{ if substr(hprt1,i,1)=';'
or ord(substr(hprt1,i,1))<20 //=chr(13)
{ // конец строки 2 символами 13+10
if ord(substr(hprt1,i,1))<20 and i>0
{ if ord(substr(hprt1,i-1,1))<20
or substr(hprt1,i-1,1)=';'
then continue ;
}
// погасить вывод на пустых строках
//if kolfield>0 or ord(substr(hprt1,i,1))>20
PutTofile1 ;
if ord(substr(hprt1,i,1))<20 and (kolfield>0 and kolfield<30)
{ kolfield:=kolfield-1 ;
}
}
else
wstr:=wstr+substr(hprt1,i,1)
}
} ;
//if wstr<>''
В любом случае вам поможет либо отладка(а да vip.pdf надо тоже почитать), либо что проще logstrtofile (а это уже vipprogr.chm)
временная таблица доступна только в пределах интерфейса. Если нужна ее видимость в других то нужно предпринимать спец.усилия(это реже нужно). В сапорте, что то выбирать из нее бесполезно. Как вариант найти таблицу, которая у вас не используется и не схемы user ( чтобы их видеть в саопрте тоже нужно кое что включить). Например таблица vagon - очень редко используется.
вопрос - а что именно импортируется? В галактике есть модуль обмена бизнес-документами, которые много что позволяет.