Страница 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 - очень редко используется.
вопрос - а что именно импортируется? В галактике есть модуль обмена бизнес-документами, которые много что позволяет.