当 table 列不断变化时,如何使用 Select INTO 语句?

How to use Select INTO statement when table columns keep changing?

我想将 Select INTO 语句用于不断更改列数的 table。

Select * FROM myTable returns 我得到了想要的输出,但我不知道如何在 powerbuilder 中使用相同的 select 语句和 INTO因为我不知道 myTable 中会有多少列,我什至不知道这些列的名称是什么。

名称和列数各不相同,所以我认为可以使用数组,但我不知道如何使用它。可能吗?还有其他方法可以解决这个问题吗?

PowerBuilder 12.5 / MSSQL 服务器 2008

使用来自 myTable 的 select * 作为您的 SQL 字符串和 create a DataWindow dynamically 。您可以使用 Describe() 函数获取列数(以及可选的名称、数据库列源、数据类型),并使用带有列号的 GetItem*() 来检索数据。

请记住,虽然为改变做准备听起来不错,但就像所有的设计选择一样,它也需要权衡取舍。在这种情况下,请考虑性能(创建 DW 需要额外访问数据库)和可维护性(解决涉及动态 DW 的问题比静态问题要难得多;您需要配备更高级的程序员)。您可能需要考虑 table 更改的频率,以及用户 所以 对应用程序感到满意的可能性有多大,偶尔发布其他更改会是一件坏事。 (并不是说我 从来没有 这样做过,而是在 PB 和数十个客户中工作了 25 年,我大概可以用一只手的手指数出次数。对我来说,这是一个仔细的被认为是最后的手段。)

作为 Terry 答案的扩展,您可以使用点符号来确定检索后数据窗口对象数据的细节。因此,在动态创建数据窗口并检索数据后,您可以将数据值分配给结构。

来自 PowerBuilder 帮助:

This example assigns all the data in dw_1 to the Any variable la_dwdata. The value assigned to la_dwdata is an array of data structures whose members match the column datatypes:

any la_dwdatala_
la_dwdata = dw_1.Object.Data

如果需要,您可以使用 Classname() 方法来确定每列的数据类型。