PmAdo - dBase

Toto je hlavní technické fórum pro diskusi o problémech při vytváření PROMOTIC aplikací a jejich řešení.

PmAdo - dBase

Postby pokky » Wed 30. Nov 2016 16:26:18

Dobrý den, podotýkám se s problémem u databáze typu dBase. Z dokumentace PROMOTIC jsem si našel jak lze provést zápis. Níže uvedený kód proběhne sice bez chyby a i přesto v cílové složce, nevidím vytvoření souboru typu DBF ve kterém by měla databáze dBase pracovat. Předem děkuji za jakoukoliv radu.

Code: Select all
Dim oDb, nLastErr1, nLastErr2

Set oDb=pMe.Pm("../../Akce/PmAdo")

oDb.DbBeginTrans

If oDb.LastErr = 0 Then
  oDb.DbExecute "", "INSERT table1 (name, value) VALUES ('pi', 3.14)", ""
  nLastErr1 = oDb.LastErr
  oDb.DbExecute "", "INSERT table2 (name, value) VALUES ('pi', 3.14)", ""
  nLastErr2 = oDb.LastErr
  If nLastErr1 = 0 And nLastErr2 = 0 Then
    oDb.DbCommitTrans
  Else
    Pm.Debug oDb.LastTextErr
    oDb.DbRollbackTrans
  End If
End If
pokky
 
Posts: 4
Joined: Wed 30. Nov 2016 15:55:44

Re: PmAdo - dBase

Postby Kazimierz Heczko » Thu 08. Dec 2016 9:40:07

Dobrý den,
aby Vám zafungoval příkaz Insert tak, jak ho uvádíte musíte předtím příslušnou tabulku vytvořit.
Tabulku (dBase) je možné vytvořit použitím metody DbExecute s příkazem v jazyce SQL:
Code: Select all
  oDB.DbExecute "", "CREATE TABLE test.dbf (PM_TIME CHAR, PM_ATTR FLOAT , col2 NUMERIC, col3 NUMERIC, col4 CHAR)", ""

Pouze objekt PmTrend automaticky vytváří tabulky, do kterých trenduje požadsovaná hodnoty, pokud chcete pracovat s databází pomocí PmAdo (nebo i zastaralého objektu PmDatabase) pak je vždy nutné příslušné tabulky vytvořit předem.

S pozdravem
Kazimierz Heczko
 
Posts: 68
Joined: Thu 13. Dec 2012 9:28:56

Re: PmAdo - dBase

Postby pokky » Wed 14. Dec 2016 14:57:05

Dobrý den, děkuji za radu. Tabulku se mi podařilo vytvořit a pomocí ViewerData Table i zapisovat. Nedaří se mi ale provést přímí zápis do tabulky. Funkce proběhne bez chyby, ale v info database se ukáže tato chyba:

1 - PmAdo('/Akce/PmAdo').DbExecute: -3502 - [Microsoft][Ovladač ODBC pro dBase] Syntaktická chyba v příkazu INSERT INTO. - (PmPanel: /Obrazy/PanelTest, Methods: Test) - 14.12.2016 14:42:55 -

FCE pro vytvoření tabulky:
Code: Select all
Dim PmDB
Set PmDB = pMe.Pm("../../Akce/PmAdo")
PmDB.DbExecute "", "CREATE TABLE data (nTime CHAR, flags NUMERIC, value1 FLOAT)", ""


Pokus o zápis nového řádku:
Code: Select all
Dim PmDB
Set PmDB = pMe.Pm("../../Akce/PmAdo")
PmDB.DbExecute "", "INSERT data  VALUES (0, 0, 0)", ""
'Nize uvedeny prikaz primo z dokumentace, taky nefunguje ... stejna chyba.
'PmDB.DbExecute "", "INSERT data VALUES (GETDATE(), 0, RAND()*100)", ""


S pozdravem
pokky
 
Posts: 4
Joined: Wed 30. Nov 2016 15:55:44

Re: PmAdo - dBase

Postby Kazimierz Heczko » Fri 16. Dec 2016 12:22:43

Dobrý den,
doporučuji Vám použít následující:
1. pro Vámi uvedenou tabulku použijte následující syntaxi příkazu:
Code: Select all
PmDB.DbExecute "", "INSERT INTO data (nTime, flags, value1) VALUES ('0', 0, 0)"

tzn. místo samotného INSERT použijte INSERT INTO.
Kromě toho raději vždy uvádějte sloupce, do kterých chcete zapisovat.
A konečně pro datový typ řetězec (CHAR) použijte apostrofy pro uvedení, že se jedná o řetězec. Jiný datový typ se do tohoto sloupce nemusí podařit zapsat.
Samozřejmě, před zápisem do této tabulky musíte mít databázi otevřenou, tabulka v tomto konkrétním případě (nový řádek pomocí INSERT INTO) otevřená být nemusí.

S pozdravem
Kazimierz Heczko
 
Posts: 68
Joined: Thu 13. Dec 2012 9:28:56


Return to Nevím jak...

Who is online

Users browsing this forum: No registered users and 6 guests