我想在我的数据库中列出所有可用的表,并能够按行计数排序和过滤.
在接受采访时提出的一个问题是,
一张表有100条记录.其中50个是重复的.是否可以使用单个查询从表中删除重复记录,以及选择并显示剩余的50个记录.
这可能在单个SQL查询中吗?
谢谢
SNA
我有一系列的类,我在.NET 4.0中使用.NET的DataContractSerializer转换为XML.序列化工作正常,我可以解析XML并在以后重新创建.NET对象而没有任何困难.
但是,大多数DataMember都不是必需的.[DataMember(IsRequired = false)].这非常适用于反序列化XML,然后您可以在文档中错过XML节点,但在将现有对象序列化为XML时,DataContractSerializer坚持将具有空值的属性写为具有属性的节点,例如
[DataContract(Name = "response", Namespace = "http://domain.com/name")]
public class MyResponseClass
{
[DataMember(Name = "count", IsRequired = true, Order = 0)]
public int Count { get; set; }
[DataMember(Name = "info", IsRequired = false, Order = 1)]
public InfoClass Info { get; set; }
[DataMember(Name = "metadata", IsRequired = false, Order = 2)]
public MetadataList Metadatas { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
可以序列化
<response xmlns="http://domain.com/name">
<count>4</count>
</response>
Run Code Online (Sandbox Code Playgroud)
但是,如果我序列化对象,它会创建:
<response xmlns="http://domain.com/name" xmlns:i="http://www.w3.org/2001/XmlSchema-instance">
<count>4</count>
<info i:nil="true" />
<metadata i:nil="true" /> …Run Code Online (Sandbox Code Playgroud) .net c# xml datacontractserializer netdatacontractserializer
从控件本身的事件处理程序内部,我想删除并释放它.
一个典型的用例TFmxObject.Release,不是吗?但是,它似乎只能在Windows下运行,但不能在Android上运行,而且此方法现在已被弃用.
我知道,不起作用不是一个很好的问题描述,但目前我无法在android下调试它.在Windows下,我看到事件处理程序.Release在完成之后继续正确,在我的控件析构函数中执行我的日志消息.在Android下,应用程序挂起.
当我使用.Free它时,它仍然在Windows下工作(析构函数立即发生,但处理程序在免费后不访问控件),而在Android中没有明显的问题,但析构函数从未被调用,所以我有一个泄漏.
随着.DisposeOf效果是一样的有.Release-视窗OK,Android的挂起.
我也尝试过,MyParent.RemoveComponent(MyControl)但一切都没有用.
我还需要做些什么来发布所有引用,以便ARC可以完成它的工作?或者怎么回事?
是的,你可以多次找到类似的问题,但是:这里发布的最优雅的解决方案适用于SQL Server,但不适用于Sybase(在我的案例中是Sybase Anywhere 11).我甚至发现一些与Sybase相关的问题被标记为SQL Server问题的重复,这没有帮助.
我喜欢但不起作用的解决方案的一个例子是WITH ... DELETE ...构造.
我找到了使用游标或while循环的工作解决方案,但我希望没有循环可能.
我希望有一个漂亮,简单和快速的查询,只删除除了一个完全重复的所有内容.
这里有一个小测试框架:
IF OBJECT_ID( 'tempdb..#TestTable' ) IS NOT NULL
DROP TABLE #TestTable;
CREATE TABLE #TestTable (Column1 varchar(1), Column2 int);
INSERT INTO #TestTable VALUES ('A', 1);
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 2);
INSERT INTO #TestTable VALUES ('B', 1);
INSERT INTO #TestTable VALUES ('B', 2);
INSERT INTO #TestTable VALUES ('B', 2); -- duplicate
INSERT …Run Code Online (Sandbox Code Playgroud) 我需要调用一个需要 的函数array of Integer,但我的值位于一个类型为 的变量中Variant,其中包含数组。
我真的必须在循环中复制值吗?我找不到更好的方法。
相同的变体也可以保存单个Integer而不是数组,因此我创建了一个允许两者都使用的辅助函数(使用 进行检查VarIsArray)。它有效,但它很长而且不好:)
type
TIntegerArray = array of Integer;
function VarToArrayInt(const V: Variant): TIntegerArray;
var
I: Integer;
begin
if VarIsArray(V) then begin
SetLength(Result, VarArrayHighBound(V, 1) + 1);
for I:= 0 to High(Result) do Result[I]:= V[I];
end else begin
SetLength(Result, 1);
Result[0]:= V;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我正在使用 Delphi 10.2.2 并且无法更改要调用的函数,如下所示:
function Work(Otherparameters; const AParams: array of Integer): Boolean;
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种简单且理想通用(或使用泛型)的方法将 an 转换array为array of const(= array of TVarRec)。我的具体情况是我有一个array of Variant并想将其传递给该Format()函数。
这是我到目前为止所发现的,但对我来说看起来很黑客:
function MyFormat(const Fmt: string; const Args: TArray<Variant>): string;
var
A: array of TVarRec;
I: Integer;
begin
SetLength(A, Length(Args));
for I:= Low(Args) to High(Args) do begin
A[I].VType:= vtVariant;
A[I].VVariant:= @Args[I];
end;
Result:= Format(Fmt, A);
end;
Run Code Online (Sandbox Code Playgroud)
似乎有效。安全吗?
可以做得更短、更好、更快吗?或者我可以用现成的东西来代替吗?:)
只是一些额外的想法和有趣的事实:
System.Rtti.TValue最近成为我的朋友。然而,这里似乎缺少一个功能。我可以使用 读取我的数组TValue.From(),但似乎没有办法将其作为 读取array of TVarRec。有一个很棒的TValueArrayToArrayOfConst,但它并没有真正的帮助,因为我必须构造一个第一个,它与存储在单个...array of TValue中的数组不同:(TValue
至少 TValue 能够将单个元素输出为 TVarRec,因此我认为我可以为所有类型的数组创建一个通用转换器。但...
你认为这有效吗?
for …Run Code Online (Sandbox Code Playgroud) delphi ×3
sql ×3
arrays ×2
sqlanywhere ×2
sybase ×2
.net ×1
android ×1
c# ×1
firemonkey ×1
sql-server ×1
variant ×1
xml ×1