我正在使用ArchLinux,我正在尝试安装OpenEdge进度驱动程序,以便我可以通过PHP访问它.我已经安装了unixodbc软件包和驱动程序,但是当我通过isql或PHP测试连接时,我得到了同样的错误......
# isql -3 SUBS2A
[01000][unixODBC][Driver Manager]Can't open lib '/usr/dlc/odbc/lib/pgoe1023.so' : file not found
[ISQL]ERROR: Could not SQLConnect
Run Code Online (Sandbox Code Playgroud)
混乱的事情是"/usr/dlc/odbc/lib/pgoe1023.so"目前存在,我甚至从"/ usr/dlc"中对它进行了符号链接.
以下是我的.ini文件......
ODBC.INI
[SUBS2A]
Description = ODBC Driver for Progress
Driver = /usr/dlc/odbc/lib/pgoe1023.so
FileUsage = 1
Run Code Online (Sandbox Code Playgroud)
odbcinst.ini(我删除了一些凭据,因为它无关紧要)
[ODBC-test]
Description = SUBS2A
Driver = SUBS2A
Server = 192.168.1.2
Port = 4000
APILevel=1
ConnectFunctions=YYN
CPTimeout=60
DriverODBCVer=03.60
FileUsage=0
SQLLevel=0
UsageCount=1
ArraySize=50
DefaultLongDataBuffLen=2048
DefaultIsolationLevel= READ COMMITTED
StaticCursorLongColBuffLen=4096
Run Code Online (Sandbox Code Playgroud)
编辑添加更多信息......
他们似乎都是32位,除了我不知道我在做什么.
[root@Crux etc]# file /usr/bin/isql
/usr/bin/isql: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically …Run Code Online (Sandbox Code Playgroud) 我有一个我需要连接的进度数据库.它们与SQL Server Management Studio相同的是什么?
服务器似乎是Progress OpenEdge 10.1
我有一个Progress数据库,我正在执行ETL.我正在读取的其中一个表没有唯一的密钥,因此我需要访问ROWID以便能够唯一地标识该行.访问正在进行的ROWID的语法是什么?
我知道使用ROWID进行行识别存在问题,但这就是我现在所拥有的.
我是 OpenEdge 数据库平台的新手,到目前为止我真的很挣扎。我有一位客户给了我他的数据库备份(单个.bak文件),该备份取自 OpenEdge v10。我只有一个 OpenEdge v11 数据库服务器。
我们不拥有 OpenEdge 或其他任何东西,因此据我所知,获得 v10 可能是不可能的。我们的客户只是希望我在数据库中查找一下,看看能找到什么,所以我不准备投入太多资金。
当我尝试进行恢复时,我得到:
C:\Progress\OpenEdge\bin>prorest.bat E:\Progress\ServicePro\ServicePro "E:\Progress\svcpro_l.bak"
OpenEdge Release 11.3 as of Wed Jul 17 16:46:26 EDT 2013
Start of extending target DB to needed size... (9432)
Version number mismatch, backup has 4246, database has 4269. (16691)
Restore failed. (1618)
!!! ERROR - Database restore utility FAILED !!! (8564)
Run Code Online (Sandbox Code Playgroud)
我已尽可能多地搜索并找到了这篇知识库文章,但它似乎不适用于恢复数据库,而是适用于恢复复制的数据库。
如何恢复从 v10 到 v11 的 Progress OpenEdge 数据库备份?
请阅读答案的评论,以更全面地了解问题是/曾经是什么
首先,我通读了很多与此相关的其他 SO 问题,但仍然无法在基本设置中使用它。这是我已经阅读的相关问题:
编辑:下面的故障排除有点误导。唯一出错的是 Github 示例中的查询语法在使用 ProgressDB OpenEdge 驱动程序时无效。
该问题的答案以及记录在案的 Git 示例中给出的示例的问题在于,没有使用真正的 ODBC 对象,而是使用了一个OleDbConnection对象。这会导致我尝试使用 Dapper 的场景出现问题。我的场景的一些背景和限制:
OdbcConnection对象与 Dapper一起使用时,出现以下错误:“ System.Data.Odbc.OdbcException : ERROR [HY000] [DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Syntax error …我已经编写了以下查询,以帮助我将数据细分为不同的单元格。这有200多个条件,所以我只提供了一个小样本。对于我来说,有没有一种更好的方法可以编写此语句,因为从研究进展来看,我最多只能编写50条CASE WHEN....THEN语句。
SELECT
Company_0.CompanyID
,Company_0.CoaCompanyName
,(CASE
WHEN Company_0.CompanyID = 7942127 THEN 'BLUE'
WHEN Company_0.CompanyID = 7950986 THEN 'BLUE'
WHEN Company_0.CompanyID = 7955733 THEN 'BLUE'
WHEN Company_0.CompanyID = 7955922 THEN 'BLUE'
WHEN Company_0.CompanyID = 7956194 THEN 'RED'
WHEN Company_0.CompanyID = 9166261 THEN 'RED'
WHEN Company_0.CompanyID = 9167003 THEN 'YELLOW'
WHEN Company_0.CompanyID = 9167015 THEN 'YELLOW
ELSE NULL
END' AS 'CELL'
Run Code Online (Sandbox Code Playgroud)
返回结果后,它应如下所示:
ID COMPANY NAME CELL
-------------------------------------------------------
7942127 A BLUE
7950986 B BLUE
7955733 C BLUE
7955922 D BLUE
7956194 …Run Code Online (Sandbox Code Playgroud) 说我有这样的查询:
SELECT *
FROM TABLE
Run Code Online (Sandbox Code Playgroud)
它返回:
TABLE
ID | DATA | VAL
===============
01 | ABCD | 1
01 | DEFG | 2
02 | FGHI | 3
02 | HIJK | 2
03 | JKLM | 3
03 | LMNO | 4
04 | NOPQ | 0
04 | PQRS | 1
Run Code Online (Sandbox Code Playgroud)
目前我有一个查询,试图找到这样的好值,但它是有缺陷的,因为包含其他行中的VAL不好的ID,这不是我想要的.
SELECT *
FROM TABLE
WHERE TABLE.VAL IN ("1","2","3")
Run Code Online (Sandbox Code Playgroud)
将返回此(缺少LMNO和PQRS):
TABLE
ID | DATA | VAL
===============
01 | ABCD | 1
01 | DEFG | 2 …Run Code Online (Sandbox Code Playgroud) 我正在努力了解如何在进度案例表达式中检查空值。我想查看是否存在一列并使用它,如果不使用后备列。例如,威廉的名字将由Bill在fn.special-char中覆盖。
我有以下查询:
SELECT
"PUB"."NAME"."LAST-NAME" as LastName,
CASE fn."SPECIAL-CHAR"
WHEN is null THEN "PUB"."NAME"."FIRST-NAME"
ELSE fn."SPECIAL-CHAR"
END as FirstName
FROM "PUB"."NAME"
LEFT OUTER JOIN "PUB"."DAT-DATA" fn on "PUB"."NAME"."NAME-ID" = fn."DAT-SRC-ID" and 11 = fn."FLD-FIELD-ID"
Run Code Online (Sandbox Code Playgroud)
当我运行查询时,我得到:
ORBC Progress OpenEdge Wire Protocol驱动程序] [OPENEDGE]语法错误SQL语句等于或大约为“,然后为” PUB“。” NAME“。” FIRST-“(10713)
如果我选择*,我会看到一切。它只是不喜欢空白部分。我还可以将when null更改为when'bob',并且它可以工作。
在进度数据库查询中使用空值是否需要做其他事情?
我正在尝试在Progress SQL中做这样的事情(这不是POSTGRES!)
SELECT
CASE WHEN code LIKE '%foo%' THEN 'Y' ELSE 'N' END as foo
FROM
bar
Run Code Online (Sandbox Code Playgroud)
但是Progress不支持LIKE运算符.INSTR看起来它可能会完成这项工作,但它是一个Progress扩展,我正在使用的数据库不支持.是否有另一种使用标准ODBC函数实现此目的的方法?
谢谢
我面临着一个我不知道如何继续的任务:将一个120 GB的数据库从PROGRESS迁移到SQL Server 2008.
我坦率地说,从来没有听说过PROGRESS,也不能真正了解他们的网站......我所拥有的是一个restore包含128个文件的文件夹,dbqsXXX其中XXX从1到128,每个文件为1 GB在尺寸方面.
我不知道PROGRESS,我没有任何PROGRESS服务器可用 - 有没有希望我可以从这些文件中获取数据到SQL Server?
另外:我试图找到ODBC驱动程序,我找到一个(称为SequeLink ODBC 4.51),但我无法安装它,因为它不喜欢我的Win7 x64机器:-(并且在PROGRESS网站本身,我似乎无法找到任何用于下载的ODBC驱动程序 - 只需要花费$$$$$$的东西
那么 - 我的选择是什么?
任何提示,技巧,网站,网络广播都是最受欢迎的!
data-migration database-migration progress-db openedge sql-server-2008