【问题标题】:Filter wrong database records in a DataGridView control (Visual Studio 2005)(Visual Basic) (Normalization)在 DataGridView 控件中筛选错误的数据库记录 (Visual Studio 2005)(Visual Basic)(规范化)
【发布时间】:2012-03-10 02:03:27
【问题描述】:

我有这个数据库,我需要在 Visual Studio 2005 中使用 Visual Basic 表单加载它。

数据库有 6 个表,它们包含错误的数据,我在表单中加载数据库时必须过滤这些数据。

一个简单的例子:

第一个表是 Category,它有 3 个字段(id、name、description)。在一条记录中,我有 2a 用于 id(仅数字字段),而在另一条记录中,我有 m1lk 用于名称(仅字符串字段)。

当我单击一个按钮时,我将数据库加载到 DataGridView 控件中。如何阻止 Visual Basic 将那些具有无效数据的记录加载到 DataGridView 控件中(如我的示例中)。

我尝试过使用 WHERE 和 LIKE 的 SQL 查询,比如 in

SELECT   IdCategoría, NombreCategoría, Descripción
FROM     Categorías
WHERE    (NombreCategoría LIKE '[!l]%') AND (IdCategoría LIKE '[!abcdefghijklmnñopqrstuvwxyz]')

但是同时过滤像 Angel* 和 P3ter 和 Hood8 这样的东西真的很困难......

请在您的答案中显示示例代码,以便我尝试。

提前致谢。

【问题讨论】:

  • -1,没有显示任何研究工作。与其“在您的答案中显示示例代码以便我可以尝试”,不如尝试编辑您的问题以包含 编写并尝试过的代码,以便我们向您展示您哪里出错了。 (这也会鼓励我取消我的“-1”。)
  • StackOverflow 有一个常见问题解答。见stackoverflow.com/faq#questions
  • 感谢您发布您的 SQL 语句。我为你的问题删除了我的 -1,但我标记了你的非建设性评论。
  • @Ashir:请保持文明的语气。您之前曾在 SO 上进行过评论大战,这是不受欢迎的。只有当你确定它们是合理的和/或有趣的时候才应该使用讽刺性的言论,在这种情况下两者都不是。 Catcall 最初的反对票是相当合法的。

标签: vb.net visual-studio-2005 ms-access-2007 normalization


【解决方案1】:

如果您使用数字数据类型在 MS Access 表中定义列,则它根本不允许使用像“2a”这样的值。但是文本列允许像“m1lk”这样的值,因为“m1lk”是一个有效的字符串。

快速解决方法

要仅选择那些可以解释为数字的值,请使用 isumeric() 函数。您需要一个符合这些要求的 SQL 语句。

SELECT your-column-list
FROM some-table
WHERE isnumeric(numeric-column-having-bad-data)

请注意,isnumeric("2e5")isnumeric("2d5") 等表达式将返回 True。 VBA 将“2d5”和“2e5”都解释为 2^5(“2 的五次方”)。

要选择根本不包含数字的数据,请使用这样的正则表达式。 (我不确定您是否正在尝试这样做。)

SELECT your-column-list
FROM some-table
WHERE some-column-name Not Like "*[0-9]*";

【讨论】:

  • 是的,正常情况下,规范化的数据库(或定义良好的)不应该接受也不包含除了已经由它的数据类型定义的数据类型之外的数据类型,但是这个数据库它没有被规范化,这就是它有东西的原因像2a或m1lk。我尝试了NOT LIKE '*[0-9]*',但它不起作用,我仍然得到 P3ter 和 Wooh8 以及类似的记录......
  • @Ashir:“定义明确”是正确的术语;当您谈论 SQL 数据库时,“规范化”意味着完全不同的东西。表达式Not Like "*[0-9]*" 确实消除了值“P3ter”和“Wooh8”;确保将其应用于正确的列。
猜你喜欢
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多