Sql Delphi中ADO查询连接到DB网格时出现问题?

Sql Delphi中ADO查询连接到DB网格时出现问题?,sql,ms-access,delphi,delphi-xe2,pascal,Sql,Ms Access,Delphi,Delphi Xe2,Pascal,问题背景: 因此,我试图从数据库中显示一个表(在我的GUI的无线组中选择特定的表),通常在DBGrid中,这样当用户在SQL查询中键入时,他们就能够在DBGrid中看到表中的更改。 (除非另有说明,否则显示的所有图像均来自德尔福的设计视图) 可以在其中选择表的无线组的图像(无线组尚未执行任何操作): 主要问题: 问题是它并没有显示所有内容,它只显示DBGrid上的第一列,而不显示其他内容 我所说的输出示例: 有关表单、组件等的额外信息: 连接到声明为TDataSource组件的DBGrid的

问题背景: 因此,我试图从数据库中显示一个表(在我的GUI的无线组中选择特定的表),通常在DBGrid中,这样当用户在SQL查询中键入时,他们就能够在DBGrid中看到表中的更改。 (除非另有说明,否则显示的所有图像均来自德尔福的设计视图)

可以在其中选择表的无线组的图像(无线组尚未执行任何操作):

主要问题: 问题是它并没有显示所有内容,它只显示DBGrid上的第一列,而不显示其他内容

我所说的输出示例:

有关表单、组件等的额外信息: 连接到声明为TDataSource组件的DBGrid的数据源称为dsrSQL。我正在使用一个名为qrySQL的TADOQuery组件,它连接到conClientInfo(一个连接到数据库的TADOConnection组件)。该数据源的数据集为qrySQL。所有组件都处于活动状态并已启用。它们也都在一个名为DM_client_的单一数据模块中。(我在表单代码中声明了“使用”下的数据模块)

Access中某个表的图像:

我的尝试: 我在conClientInfo中重新定义了连接字符串,检查了qrySQL组件和DBGrid。我仍然没有看到这个计划表面上有任何问题


提前谢谢

如果您不介意我这么说的话,那么您试图使用相同的DBGrid来 当您不知道如何显示来自两个具有不同结构的表的数据时。 无论如何,尝试这样做意味着您将失去在设计时设置网格外观的能力 并调整它以适应每个表中的特定数据

以下是我建议你做的:

  • 将TPageControl添加到表单中,并向其中添加两个TTabsheet

  • 将TDataSource、TDBGrid和TDBNavigator放在每个TTabSheet上,并将每个TDataSource连接到 datamodule中的一个数据集。假设所涉及的查询已经有了Sql 要检索要显示的数据,请将两个ADO查询都设置为活动并使用列编辑器 (可以通过右键单击每个TDBGrid来访问)设置每个TDBGrid的网格列并调整其大小 场

  • 现在,您可以独立地控制每个AdoQuery的显示,而无需将自己绑在一起

  • 如果使用TPageControl不符合您的口味,请执行类似于将每个TDBGrid嵌入到其自己的TPanel中的操作, 使两个Tpanel占据表单上完全相同的区域,并使用代码显示其中一个面板 或者根据TRadioGroup的设置,通过将一个TPanel的Visible属性设置为 正确的,另一个是错误的

    顺便说一句,一旦你有2个TDBGrid的外观和工作如你所愿,设置 AdoQueries to Active=False并在运行时使用代码打开它们——这是一种糟糕的做法 在设计时保持数据库连接和数据集等活动。你会
    当您遇到意外问题时,例如,当您希望应用程序以独占方式访问表时,以及在运行时尝试重新构造表时,请找出原因。

    我认为您真正的问题是第一列的宽度。其余的数据都在那里,但是你必须水平滚动才能看到。如果未明确定义第一列的宽度或使用隐式列,则会根据基础字段的数据类型和DBGrid的字体自动计算宽度。对于大的VARCHAR字段,它可能是一个巨大的数字。@PeterWolf谢谢,更改列的宽度帮助很大!但是我的一些领域有着广泛的价值观?我怎样才能解决这个问题?(我将Access中字段的数据类型都改为短文本而不是长文本)坦白地说,我认为你需要重新思考你的q,因为其中的大部分信息都是无关的,例如,一个不起作用的无线电组的图像,显示它是完全没有意义的,一个Access中的表是什么样子的图像。您应该包括的详细信息包括表中的字段类型和大小(以文本而非图像表示)、用于打开表的代码以及切换表时如何重置DBGrid。尝试使用同一个网格来显示来自不同结构表的数据不是一个好主意,除非您知道如何使用DBGrid实现这一点。好的,我将充分利用您的建议。不过我还有一个问题。如何将TTabSheets添加到TPageControl?因为我没有看到TTabSheet的单独组件,所以您必须在页面控件或..的处理程序中添加代码吗?右键单击页面控件并从弹出菜单中选择“新建页面”(两次)。